私はこのような名前のファイルでいっぱいのほぼ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
マップされたすべてのステートメントを展開しますfor filename in *.pdf
。で囲んで出力を確認できますecho
。
mv "$filename" "${year}_${month}_${mapping}_${location}.pdf"