
のような名前のファイルが入ったディレクトリが 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"