暫時不支援空格和特殊字元,有大佬知悉的求告知,非常感謝!
#!/bin/sh
#原始字元串,越特殊的替換越需要放前面
modifySrcArray=(
"ZJBaseUtilsDef"
"ZJBaseUtils"
"zj_"
"ZJ"
)
#替換後的字元串,和前面一一對應
modifyDstArray=(
"TestAAUtilsDef"
"TestAASmartUtils"
"ts_"
"TS"
)
SHELL_PATH=`pwd`
SHELL_NAME=''
#修改檔案内容函數
function modify_file_content() {
local modifyContentFile=$1
echo "修改檔案内容:$modifyContentFile"
for (( i = 0; i < ${#modifySrcArray[@]}; i++ ))
do
perl -pi -e 's|'${modifySrcArray[$i]}'|'${modifyDstArray[$i]}'|g' $modifyContentFile
#替換規則:"s|查找的字元串|替換的字元串|g"
done
}
#修改檔案名稱特殊字元
function modify_file_name() {
local modifyNameFile=$1
local dname=`dirname $modifyNameFile` #擷取上級目錄
local fname=`basename $modifyNameFile` #擷取檔案名
for (( i = 0; i < ${#modifySrcArray[@]}; i++ ))
do
#暫不支援帶空格的檔案名修改
spaceResult=$(echo ${modifySrcArray[$i]} | grep " ")
if [[ "$spaceResult" != "" ]]
then
continue
fi
# fname=`echo $fname | awk '{gsub(/${modifySrcArray[$i]}/,"${modifyDstArray[$i]}"); print }'`
fname=`echo $fname | sed 's|'${modifySrcArray[$i]}'|'${modifyDstArray[$i]}'|g'` #查找替換字元
if [ "$fname" != "" ]
then
local newfile=$dname/$fname #新檔案的路徑
if [ "$modifyNameFile" != "$newfile" ] #不相等時修改檔案名稱
then
mv $modifyNameFile $newfile
echo "修改檔案名稱:$modifyNameFile -> $newfile"
break
fi
else
echo "替換規則錯誤:${modifySrcArray[$i]} -> ${modifyDstArray[$i]}"
fi
done
}
#周遊所有檔案夾
function traverseFolder() {
local folder=$1
if [ "$folder" == "" ]
then
echo "未填入需修改的檔案夾路徑,退出程式!"
exit
fi
#擷取腳本的路徑,後面阻止修改腳本内容
if [ "$SHELL_NAME" = "" ]
then
fname=`basename $0`
SHELL_NAME=`pwd`/$fname
fi
#将./轉換為絕對路徑
if [[ "$folder" == ./* ]];then
local pwdPath=`pwd`
folder=`echo $folder | sed 's|./|'$pwdPath'|g'`
fi
#将.轉換為絕對路徑
if [ "$folder" == "." ];then
folder=`pwd`
fi
for file in $(ls $folder)
do
local targetFile=$folder/$file
if test -f $targetFile
then
if [ "$targetFile" != "$SHELL_NAME" ]
then
modify_file_content $targetFile #修改檔案内容
modify_file_name $targetFile #修改檔案名稱
fi
fi
if test -d "$targetFile"
then
traverseFolder $targetFile #循環周遊檔案夾
modify_file_name $targetFile
fi
done
}
#執行周遊修改檔案
traverseFolder $1