重新命名和重新排列多個檔案名稱而不重命名

重新命名和重新排列多個檔案名稱而不重命名

我有近 500 個目錄,其中充滿了名稱類似於 的文件e141107140847.pdf,我需要將它們重命名為用戶友好的名稱,例如2014_11_SDUXS_0847.pdf.我一直在嘗試使用 for 循環和 sed,但我不知所措,無法弄清楚如何將所有內容組合在一起。我也無法存取rename這台機器(FreeBSD)上的命令。

映射如下:

  • e— 垃圾字符,待刪除
  • 14— 翻譯為SDUXS.我有 36 種不同的映射需要處理。
  • 11- 月
  • 07— 天,待刪除
  • 14— 年份,轉換為 4 位數字
  • 0847— 位置代碼,保留。

答案1

因此,將其組合起來作為您的具體示例:

#!/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"

相關內容