Ubuntuのパターンを使用して一度に複数のファイルの名前を変更する


3

約300のファイルがあります

some_name_123456789.zip
another-name2_987654321.zip
something(1)_123454321.zip
[2]something_987656789.zip

それらの名前をすべてに変更する必要があります。

ds_123456789.zip
ds_987654321.zip
ds_123454321.zip
ds_987656789.zip

これどうやってするの?

回答:


9

あなたはこれを行うことができます rename コマンドラインユーティリティ。やりたいことをするためには、単純な正規表現が必要です。

rename "s/.+_/ds/g" files

.+ (これに関連して)最後の下線までのすべてを表します。 _ )文字(つまり、最初の例で述べたように、これは複数のアンダースコアで機能します)。これには、アンダースコアの前に少なくとも1文字あることが必要です。次のようなファイル名があるとします。 _20131012.zip、 つかいます .* 代わりに。つまり、この3文字の文字列( .+_ または .*_ )までのすべてに一致します そして含む ファイル名の最後の下線 s/ 古い / 新しい / 手段 新しい文字列を代入します( ds )古い文字列を表します。の g 手段 g この場合、必要ないかもしれません。


正規表現が最初から一致するようにするために、 ^ はじめにまた、OPはアンダースコアを残したかったのです。の g 末尾のオプションは、ここでは実際には必要ありません。可能であれば、ファイル名の複数のインスタンスと一致します。そのため、このコマンドのほうがパフォーマンスがよいと思います。 rename "s/^.+_/ds_/" files
pabouk

を追加 g これは私からの標準的な習慣であり、私はそれがこの場合必要ではないことに同意します。
noggerl

これはフォルダのリストに対しても機能しますか、それともそれを作成するために何を追加しますか?
TechyTimo

たぶん私はexecオプションを見つけるユーティリティを使用するでしょうが、これはあなたが取り組んでいるファイルの名前によります。上記のzipファイルの名前を変更するには、あなたが使用することができます find . -name "*.zip*" -exec rename "s/.+_/ds/g" {} \; "{} \;" findが返すファイル名の変数です。
noggerl

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.