Bashでファイル名を変更するときに、ファイル名の部分文字列の順序を変更しますか?

Bashでファイル名を変更するときに、ファイル名の部分文字列の順序を変更しますか?

何百ものファイルがあり、すべて同じテンプレートに従う名前を持っています。

results_20210503_input003_run017_cluster003.txt

Bashで部分文字列を並べ替える有効な方法ですか?

results_input003_cluster003_run017_20210503.txt

cut -f$iを使用して各フィールドをインポートしてから、をmv使用してファイルの名前を変更しようとしましたが、それは間違って見えます。

ベストアンサー1

使用Perlのrenameコマンドラインツール(オペレーティングシステムによっては、またはとrename呼ばれる場合があります):perl-renameprename

rename 's/(results)(_[0-9]{8})(.*)(\.txt)/$1$3$2$4/' results*txt

-n名前の変更を表示するには - フラグを使用してテストを実行してみてください。

仕組み:

  • s/A/B/- ファイル名のパターン A をパターン B に置き換えます。
  • 括弧内のパターンには、発生時にインデックス番号が割り当てられます。
  • グループ化には以下が含まれます。 1)results:リテラル「結果」。 2)_[0-9]{8}:下線の後に0から9までの8桁の数字。 3).*. =すべての文字、* =可能な限り前の入力を繰り返します。 4)\.txtリテラル「.txt」は.エスケープする必要があります。それ以外の場合(3)のように「すべての文字」になります。
  • 必要に応じてパターングループを並べ替えます。以下を参照してください。$<ID>

おすすめ記事