常見需求:目錄下有 11.txt、12.txt、13.txt... 想重命名為 1.txt、2.txt、3.txt... 本文提供 Bash 腳本實現,利用參數擴展提取擴展名、計數器生成新名。
#!/bin/bash
count=1
for i in *.txt; do
# ${i#*.} 刪除最短前綴匹配 "*.", 保留擴展名部分(這裡為 "txt")
# 但實際需求是保留擴展名,新文件名為 count.txt
new="$count.${i#*.}"
mv "$i" "$new"
if [ $? -eq 0 ]; then
echo "renaming $i to $new"
((count++))
fi
done
for i in *.txt:遍歷當前目錄所有 .txt 文件(按字典序)。${i#*.}:Shell 參數擴展,「刪除最短前綴匹配 *.」,對 11.txt 結果為 txt。new="$count.${i#*.}":組合新文件名,如 1.txt、2.txt。mv "$i" "$new":重命名(同目錄下 mv 即重命名)。$?:上一條命令退出碼,0 表示成功。((count++)):算術遞增。find . -name "*.txt" | while read f; do ... done。printf "%03d.txt" $count → 001.txt。for i in $(ls -t *.txt); do ...。echo mv ... 確認無誤再執行。"$i" "$new"。mv -n(不覆蓋)或 mv -i(交互確認)。*.txt 可能超過命令行長度限制,改用 find -print0 | xargs -0。Shell 參數擴展(#、%、##、%%)是批量文件名處理的利器,配合計數器、格式化輸出,可靈活應對各類重命名需求。