名前を変更せずに複数のファイル名を変更および並べ替える

名前を変更せずに複数のファイル名を変更および並べ替える

のような名前のファイルが入ったディレクトリが 500 個近くありe141107140847.pdf、それらを のようなユーザーフレンドリな名前に変更する必要があります2014_11_SDUXS_0847.pdf。for ループと sed を使用しようとしていますが、手に負えない状況にあり、すべてをまとめる方法がわかりません。また、このマシン (FreeBSD) では コマンドにアクセスできませんrename

マッピングは次のとおりです。

  • 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すべてのマッピングのステートメントを展開し、 で囲むfor filename in *.pdfと出力を確認できます。次に、echoを次のように変更します。

mv "$filename" "${year}_${month}_${mapping}_${location}.pdf"

関連情報