ファイル名の1つのコンポーネントを変更して複数のファイルの名前を変更するには?

ファイル名の1つのコンポーネントを変更して複数のファイルの名前を変更するには?

コマンドラインを使用して複数のファイルの名前を変更する方法について多くの質問を見つけました。ただし、このファイル名を変更する特定の問題は解決できません。

something_4M_something_something_manyothersomethings.csv

以下を入力してください:

something_4_M_something_something_manyothersomethings.csv

私に必要なのはフィールドを分割することですが、4Mそう4_Mすることはできません(注:各下線で区切ると、タスクにとって重要ではない他のフィールドがたくさんあります。

私がしたことは次のとおりですが、期待どおりに動作しません。正規表現に問題があるようですが、より良い方法が見つかりません。

rename -n 's/.4M/$&_4_M/' *

また、このような質問の1つのコメントで似たようなものを見つけましたが、もはや見つからないので、私が書いたものが正確にどのように機能するのかわかりません。

ベストアンサー1

本当にあなたが望むもの4Mに置き換えるものであれば、4_M正規表現のバリエーションで次のことができます。

$ ls
something_4M_something_something_manyothersomethings.csv
$ rename -n 's/4M/4_M/' *
'something_4M_something_something_manyothersomethings.csv' would be renamed to 'something_4_M_something_something_manyothersomethings.csv'

正規表現は何でも機能します。~へ名前なので、先行する「何か」を維持するために特定のタスクを実行する必要はありません。

4M最初の「何か」を2番目の「何か」に移動したり、下線の後の最初の項目に制限するなど、他の作業を実行するには、質問を編集して明確にします。


コメントに示されているように、-n練習の実行が行われ、何が起こるかを示し、実際には何もしません。

質問の例はすでに使用されているので、-n質問者がこれを理解できると仮定します。

おすすめ記事