2番目または3番目の文字より前のすべての項目を削除してファイル名を変更するにはどうすればよいですか?

2番目または3番目の文字より前のすべての項目を削除してファイル名を変更するにはどうすればよいですか?

次の名前の別のフォルダにあるファイルの一覧があります。

aaaaaa_bb_cccc_ddddd_ee.jpg

その一部では、2番目の前にすべてを削除する必要があります。

cccc_ddddd_ee.jpg

他の場合は(すでに別のフォルダにあります)、3番目のフォルダより前のすべてのアイテムを削除する必要があります_

ddddd_ee.jpg

いくつかの正規表現を使用する rename のようなコマンドについて知っていますが、この場合の正確な表現はわかりません。 Linux端末でこれをどのように実行できますか?

ベストアンサー1

Perlの名前変更ユーティリティを使用して

$ ls
aaaaaa_bb_cccc_ddddd_ee.jpg
$ rename -n 's/([^_]*_){2}//' *
rename(aaaaaa_bb_cccc_ddddd_ee.jpg, cccc_ddddd_ee.jpg)
$ rename -n 's/([^_]*_){3}//' *
rename(aaaaaa_bb_cccc_ddddd_ee.jpg, ddddd_ee.jpg)

この-nフラグは、Renameに実行するアクションを出力するように指示します。削除すると、編集-n内容が適用されます。

*現在のディレクトリ内のすべてのファイルに展開されます。上記の例ではファイルは1つしかありませんが、名前変更は1回の実行で複数のファイルに対して操作を実行できます。この場合は*シェルループよりも高速です。

s/([^_]*_){2}//意味: ファイル名のsすべての正規表現を何もないものに置き換えます。([^_]*_){2}正規表現は、アンダースコアではなく任意の数[^_]*_アンダースコアが2回繰り返されることを意味します。

おすすめ記事