Shell-Script
重命名和重新排列多個文件名而不重命名
我有近 500 個目錄,其中包含名稱為 的文件
e141107140847.pdf
,我需要將它們重命名為使用者友好的名稱,例如2014_11_SDUXS_0847.pdf
. 我一直在嘗試使用 for 循環和 sed,但我不知所措,無法弄清楚如何將所有內容放在一起。我也無權訪問rename
這台機器(FreeBSD)上的命令。映射如下:
e
— 垃圾字元,要刪除14
— 轉換為SDUXS
。我有 36 種不同的映射要處理。11
- 月07
— 日,將被刪除14
— 年,轉換為 4 位數字0847
— 位置程式碼,保留。
因此,為您的具體範例將其組合在一起:
#!/bin/bash filename='e141107140847.pdf' echo Given file name ${filename} - case ${filename:1:2} in 14) mapping="SDUXS" ;; *) mapping="XXXXX" ;; esac month="${filename:3:2}" year="20${filename:7:2}" location="${filename:9:4}" echo New filename - ${year}_${month}_${mapping}_${location}.pdf
似乎給出了你尋求的結果。展開
case..esac
所有映射的語句並包裝在 a 中for filename in *.pdf
,您可以確認輸出;然後只需將其更改echo
為:mv "$filename" "${year}_${month}_${mapping}_${location}.pdf"