名前を変更せずに複数のファイル名を変更して並べ替えます。

名前を変更せずに複数のファイル名を変更して並べ替えます。

私はこのような名前のファイルでいっぱいのほぼ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"

おすすめ記事