首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

Shell 批量重命名腳本實戰:將 11.txt 12.txt... 重命名為 1.txt 2.txt...

     編輯:關於C語言

Shell 批量重命名腳本實戰:將 11.txt 12.txt... 重命名為 1.txt 2.txt...

常見需求:目錄下有 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++)):算術遞增。

三、 進階變體

  1. 遞歸子目錄:find . -name "*.txt" | while read f; do ... done。
  2. 零填充對齊:printf "%03d.txt" $count → 001.txt。
  3. 按修改時間排序:for i in $(ls -t *.txt); do ...。
  4. 乾運行模式:先 echo mv ... 確認無誤再執行。

四、 注意事項

  • 文件名含空格需雙引號包裹 "$i" "$new"。
  • 目標文件已存在會覆蓋,建議加 mv -n(不覆蓋)或 mv -i(交互確認)。
  • 大量文件時 *.txt 可能超過命令行長度限制,改用 find -print0 | xargs -0。

五、 總結

Shell 參數擴展(#、%、##、%%)是批量文件名處理的利器,配合計數器、格式化輸出,可靈活應對各類重命名需求。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved