copy_to_online.sh 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. #!/bin/bash
  2. ShellDir() {
  3. echo $(dirname $(realpath $0));
  4. }
  5. Main()
  6. {
  7. # local p1=$1
  8. # local shellDir=`ShellDir`
  9. # local rules=$(cat "$shellDir/rule.txt")
  10. # echo $p1
  11. # echo $shellDir
  12. # echo ${rules[*]}
  13. # local paths=`find $1 -depth 1`
  14. # # echo ${paths[*]}
  15. # for path in ${paths[*]}
  16. # do
  17. # echo $path
  18. # done
  19. local target="/Users/xulianxin/Documents/develop/game/TileMatch/TileStory/Resources/res_mini_story2/online"
  20. local root="/Users/xulianxin/Documents/develop/game/TileMatch/TileStory/Resources/res_mini_story2/线上剧情"
  21. rm -rf $target
  22. Recursive $1 $target $root
  23. }
  24. RelativeB2A()
  25. {
  26. # 确保传入了两个参数
  27. if [ "$#" -ne 2 ]; then
  28. echo "Usage: $0 <absolute_path_1> <absolute_path_2>"
  29. exit 1
  30. fi
  31. # 定义两个绝对路径
  32. abs_path_1="$1"
  33. abs_path_2="$2"
  34. # 使用数组来存储分割后的路径部分
  35. IFS='/' read -ra ADDR1 <<< "$abs_path_1"
  36. IFS='/' read -ra ADDR2 <<< "$abs_path_2"
  37. # 初始化相对路径为空
  38. relative_path=""
  39. # 找到两个路径中共同的前缀长度
  40. i=0
  41. len1=${#ADDR1[@]}
  42. len2=${#ADDR2[@]}
  43. while [[ $i -lt $len1 && $i -lt $len2 && ${ADDR1[i]} == ${ADDR2[i]} ]]; do
  44. ((i++))
  45. done
  46. j=$i
  47. # 对于ADDR2中剩余的部分,每多一个就添加一个".."
  48. while [[ ${ADDR2[i]} ]]; do
  49. relative_path="../$relative_path"
  50. ((i++))
  51. done
  52. # 初始化一个空字符串来拼接ADDR1中剩余的部分
  53. remaining_path=""
  54. if [ $len1 -lt $len2 ]
  55. then
  56. # 添加ADDR1中剩余的部分到相对路径
  57. for (( ; j<$len1; j++ )); do
  58. if [[ -n "$remaining_path" ]]; then
  59. remaining_path="/$remaining_path"
  60. fi
  61. remaining_path="${remaining_path}${ADDR1[j]}"
  62. done
  63. fi
  64. if [ $len2 -lt $len1 ]
  65. then
  66. # 添加ADDR1中剩余的部分到相对路径
  67. for (( ; j<$len1; j++ )); do
  68. if [[ -n "$remaining_path" ]]; then
  69. remaining_path="${remaining_path}/${ADDR1[j]}"
  70. else
  71. remaining_path="${remaining_path}${ADDR1[j]}"
  72. fi
  73. done
  74. fi
  75. # 如果剩余路径不为空,则将其添加到相对路径中
  76. if [[ -n "$remaining_path" ]]; then
  77. relative_path="${relative_path}${remaining_path}"
  78. fi
  79. # 去除可能开头的多余"/"
  80. relative_path="${relative_path#/}"
  81. # 如果相对路径为空,说明两个路径相同(或者一个是另一个的子路径)
  82. if [[ -z "$relative_path" ]]; then
  83. relative_path="."
  84. fi
  85. echo $relative_path
  86. }
  87. Recursive()
  88. {
  89. local p1=$1
  90. local p2Target=$2
  91. local p2Root=$3
  92. local shellDir=`ShellDir`
  93. local rules=$(cat "$shellDir/rule.txt")
  94. # echo $p1
  95. # echo $shellDir
  96. # echo ${rules[*]}
  97. local paths=`find $1 -depth 1`
  98. # echo ${paths[*]}
  99. for path in ${paths[*]}
  100. do
  101. if [ -d $path ];
  102. then
  103. for rule in ${rules[*]}
  104. do
  105. # echo $rule
  106. # echo $path
  107. # if [[ $path =~ ^.*/.*? ]]
  108. # then
  109. # echo $path
  110. # fi
  111. if echo "$path" | grep -oE '^.*/_.*?$' >/dev/null;
  112. then
  113. local relative=`RelativeB2A $path $p2Root`
  114. local fullpath=$p2Target/$relative
  115. local toPath=`dirname $fullpath`
  116. mkdir -p $toPath
  117. # echo $fullpath
  118. cp -RP $path $toPath
  119. fi
  120. done
  121. # echo "d "$path
  122. Recursive $path $p2Target $p2Root
  123. # else
  124. # echo "f "$path
  125. fi
  126. done
  127. }
  128. Test()
  129. {
  130. Main "/Users/xulianxin/Documents/develop/game/TileMatch/TileStory/Resources/res_mini_story2/线上剧情"
  131. }
  132. Test
  133. # Main $1