Shell-Script

重命名和重新排列多個文件名而不重命名

  • June 2, 2017

我有近 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"

引用自:https://unix.stackexchange.com/questions/368819