#! /usr/local/bin/bash
####################################### skip define ##########################################
skipFolderArr=("src/cocos" "src/packages")
skipFileArr=("src/main.lua" "src/gm.lua" "src/config.lua" "src/app/MyApp.lua" "src/app/Utils.lua" "src/app/dataModel/name.lua" "src/app/views/Huodong/TwoTip.lua" "src/app/views/activity/Activity01.lua" "src/app/views/activity/Activity02.lua" "src/app/views/activity/Activity03.lua")
####################################### skip define ##########################################
# define rootPath
rootPath=$1
rootPathLength=${#rootPath}
newProffix="new/"
newProffixLength=${#newProffix}
newRootPath=${newProffix}${rootPath}
newRootPathLength=${#newRootPath}
folderReflactFile="folder-reflact.txt"
fileReflactFile="file-reflact.txt"
####################################### some handler ##########################################
# clear old files
#rm -rf src
rm -rf ${newRootPath} ${folderReflactFile} ${fileReflactFile}
mkdir -p ${newRootPath}
#tar -zxvf src.tar.gz
####################################### some handler ##########################################
# mv map
# origin file path name -> target file path name
declare -A fileNameMap
declare -A filePathNameMap
####################################### utils function ##########################################
# upper string's first letter
function first_letter_upper(){
? ? temp=`echo ${1:0:1} | tr '[a-z]' '[A-Z]'`${1:1}
? ? echo $temp
}
# random switch 0 orn 1
function random_switch(){
? ? temp=$(($RANDOM%2))[圖片]
? ? echo $temp
}
# random string with length
name_string_arr=(a b c d e f g h i j k l m n o p q r s t u v w x y z)
function random_string(){
? ? str=""
? ? for ((i=0; i < $1; i++));do str="$str${name_string_arr[$RANDOM%26]}";done
? ? echo $str
}
####################################### utils function ##########################################
# random folder name, length=5.
function randomFolderName(){
? ? echo $(random_string 5)
}
# random file name, length=10.
function randomFileName(){
? ? str=$(random_string 10)
? ? str=$(first_letter_upper $str)
? ? echo $str
}
# check if string in array
# $1 string
function checkFolderIn(){
? ? exist=false
? ? for str in ${skipFolderArr[@]}
? ? do
? ? ? ? if [ $1 == $str ]; then
? ? ? ? ? ? exist=true
? ? ? ? ? ? break
? ? ? ? fi
? ? done
? ? echo $exist
}
# check if string in array
# $1 string
function checkFileIn(){
? ? exist=false
? ? for str in ${skipFileArr[@]}
? ? do
? ? ? ? if [ $1 == $str ]; then
? ? ? ? ? ? exist=true
? ? ? ? ? ? break
? ? ? ? fi
? ? done
? ? echo $exist
}
# handle file path name map save
function handleMapSave(){
? ? # key reduce length
? ? krl=${rootPathLength}+1
? ? # value reduce length
? ? vrl=${newRootPathLength}+1
? ? saveKey=${1:${krl}}
? ? saveKey2=${saveKey//'/'/'.'}
? ? saveValue=${2:${vrl}}
? ? filePathNameMap[${saveKey}]=${saveValue}
? ? filePathNameMap[${saveKey2}]=${saveValue}
}
function writeFolderReflactToFile(){
? ? echo -e ${1}"-----------mkdir----------"${2} >> ${folderReflactFile}
}
function writeFileReflactToFile(){
? ? echo -e ${1}"-----------file path name----------"${2} >> ${fileReflactFile}
}
# traverse folders to collect folders and files
function skipFolderTraverse(){
? ? for file in `ls $1`
? ? do
? ? ? ? if [ -d $1"/"$file ]; then
? ? ? ? ? ? # traverse folder
? ? ? ? ? ? oldPath=$1"/"${file}
? ? ? ? ? ? mkdirPath=${newRootPath}${1:${rootPathLength}}"/"${file}
? ? ? ? ? ? echo ${oldPath}"-----------mkdir----------"${mkdirPath}
? ? ? ? ? ? writeFolderReflactToFile ${oldPath} ${mkdirPath}
? ? ? ? ? ? mkdir -p ${mkdirPath}
? ? ? ? ? ? skipFolderTraverse ${oldPath}
? ? ? ? else
? ? ? ? ? ? # define copy filePathName -> newFilePathName
? ? ? ? ? ? filePathName=${1}"/"${file}
? ? ? ? ? ? newFilePathName=${newRootPath}${1:${rootPathLength}}"/"${file}
? ? ? ? ? ? echo ${filePathName}"-----------file path name----------"${newFilePathName}
? ? ? ? ? ? writeFileReflactToFile ${filePathName} ${newFilePathName}
? ? ? ? ? ? cp ${filePathName} ${newFilePathName}
? ? ? ? fi
? ? done
}
# traverse folders to confuse folders and files
function confuseFolderTraverse(){
? ? for file in `ls $1`
? ? do
? ? ? ? if [ -d $1"/"$file ]
? ? ? ? then
? ? ? ? ? ? oldPath=$1"/"${file}
? ? ? ? ? ? newFolder=$(randomFolderName)
? ? ? ? ? ? newPath=$2"/"${newFolder}
? ? ? ? ? ? mkdirPath=${newRootPath}${1:${rootPathLength}}"/"${file}
? ? ? ? ? ? # folder "cocos" and "package" are con't fixed.
? ? ? ? ? ? if [ $(checkFolderIn ${oldPath}) == true ]; then
? ? ? ? ? ? ? ? echo ${oldPath}"-----------mkdir----------"${mkdirPath}
? ? ? ? ? ? ? ? writeFolderReflactToFile ${oldPath} ${mkdirPath}
? ? ? ? ? ? ? ? mkdir -p ${mkdirPath}
? ? ? ? ? ? ? ? skipFolderTraverse ${oldPath}
? ? ? ? ? ? ? ? continue
? ? ? ? ? ? fi
? ? ? ? ? ? mkdirPath=${newRootPath}${2}"/"${newFolder}
? ? ? ? ? ? echo ${oldPath}"-----------mkdir----------"${mkdirPath}
? ? ? ? ? ? writeFolderReflactToFile ${oldPath} ${mkdirPath}
? ? ? ? ? ? mkdir -p ${mkdirPath}
? ? ? ? ? ? # traverse folder
? ? ? ? ? ? confuseFolderTraverse ${oldPath} ${newPath}
? ? ? ? else
? ? ? ? ? ? # get file suffix
? ? ? ? ? ? fileSuffix="."${file##*.}
#? ? ? ? ? ? echo "-----------file suffix-----------"${fileSuffix}
? ? ? ? ? ? # define fileName -> newFileName
? ? ? ? ? ? fileName=$(basename ${file} ${fileSuffix})
? ? ? ? ? ? newFileName=$(randomFileName)
#? ? ? ? ? ? echo ${fileName}"-----------file name----------"${newFileName}
? ? ? ? ? ? # define file -> newFile
? ? ? ? ? ? newFile=$newFileName$fileSuffix
#? ? ? ? ? ? echo $file"-----------file----------"$newFile
? ? ? ? ? ? # define copy filePathName -> newFilePathName
? ? ? ? ? ? filePathName=${1}"/"${file}
? ? ? ? ? ? newFilePathName=${newRootPath}${2}"/"${newFile}
? ? ? ? ? ? if [ $(checkFileIn ${filePathName}) == true ]; then
? ? ? ? ? ? ? ? newFilePathName=${newRootPath}${2}"/"${file}
? ? ? ? ? ? ? ? echo ${filePathName}"-----------file path name----------"${newFilePathName}
? ? ? ? ? ? ? ? writeFileReflactToFile ${filePathName} ${newFilePathName}
? ? ? ? ? ? ? ? handleMapSave ${filePathName//${fileSuffix}/''} ${newFilePathName//${fileSuffix}/''}
? ? ? ? ? ? ? ? cp ${filePathName} ${newFilePathName}
? ? ? ? ? ? ? ? continue
? ? ? ? ? ? fi
? ? ? ? ? ? echo ${filePathName}"-----------file path name----------"${newFilePathName}
? ? ? ? ? ? writeFileReflactToFile ${filePathName} ${newFilePathName}
? ? ? ? ? ? handleMapSave ${filePathName//${fileSuffix}/''} ${newFilePathName//${fileSuffix}/''}
? ? ? ? ? ? cp ${filePathName} ${newFilePathName}
? ? ? ? ? ? sed -i "s|${fileName}|${newFileName}|g" $newFilePathName
? ? ? ? ? ? fileNameMap[${fileName}]=${newFileName}
? ? ? ? fi
? ? done
}
function replace(){
? ? for file in `ls $1`
? ? do
? ? ? ? if [ -d ${1}"/"$file ]
? ? ? ? then
? ? ? ? ? ? oldPath=${1}"/"${file}
? ? ? ? ? ? #echo ${oldPath}
? ? ? ? ? ? echo ${oldPath:${newProffixLength}}
? ? ? ? ? ? if [ $(checkFolderIn ${oldPath:${newProffixLength}}) == true ]; then
? ? ? ? ? ? ? ? continue
? ? ? ? ? ? fi
? ? ? ? ? ? replace ${oldPath}
? ? ? ? else
? ? ? ? ? ? filePathName=${1}"/"$file
? ? ? ? ? ? for key in ${!filePathNameMap[@]};do
? ? ? ? ? ? ? ? value=${filePathNameMap[${key}]}
? ? ? ? ? ? ? ? echo "sed -i 's|${key}|${value}|g' $filePathName"
? ? ? ? ? ? ? ? sed -i "s|${key}|${value}|g" $filePathName
? ? ? ? ? ? done
? ? ? ? ? ? for key in ${!fileNameMap[@]};do
? ? ? ? ? ? ? ? value=${fileNameMap[${key}]}
? ? ? ? ? ? ? ? echo "sed -i 's|${key}|${value}|g' $filePathName"
? ? ? ? ? ? ? ? sed -i "s|${key}|${value}|g" $filePathName
? ? ? ? ? ? done
? ? ? ? fi
? ? done
}
function handler(){
? ? # traverse folder to handle files
? ? confuseFolderTraverse ${rootPath}
echo "-----------------------------------------------------------------------------------------------------------------"
echo "-----------------------------------------------------------------------------------------------------------------"
echo "----------------------------------------------------traverse-----------------------------------------------------"
echo "-----------------------------------------------------------------------------------------------------------------"
echo "-----------------------------------------------------------------------------------------------------------------"
? ? replace ${newRootPath}
}
handler