需將專案中所有 .pc 檔案重命名為 .ec,且包含所有子目錄。手動操作不切實際,遞迴函式可完美解決。
modify() {
PARAMS=2
if [ $# -ne $PARAMS ]; then
echo "usage: mv_to .suf1 .suf2"
return 1
fi
count=0
do_recursive "$1" "$2"
echo "complete! $count files have been modified."
}
do_recursive() {
doit "$1" "$2"
for filename in $(ls); do
if [ -d "$filename" ]; then
cd "$filename"
do_recursive "$1" "$2"
cd ..
fi
done
}
doit() {
oldname=$(ls | grep "$1$")
for name in $oldname; do
if [ -d "$name" ]; then
: # 略過目錄
else
prename=${name%.*} # 移除副檔名
newname="${prename}$2" # 加上新副檔名
echo -e "$PWD/$name\t\t$newname"
mv "$name" "$newname"
count=$((count + 1))
fi
done
}
cd 進入子目錄處理完畢後 cd .. 返回${name%.*} 比 awk 更高效移除副檔名$((count + 1)) 算術擴展source modify.func # 載入函式
modify .pc .ec # 執行重命名
find 替代 ls | grep 處理大量檔案更可靠-i 互動模式防止誤覆蓋--dry-run 僅顯示不實際重命名for 迴圈中直接使用 ls 輸出(檔名含空白會出錯)此範例展示 Shell 遞迴函式的經典模式,可擴展應用於批次壓縮、編碼轉換、權限修改等場景。