共通のプレフィックスとサフィックスを持つ複数のファイルを削除するにはどうすればよいですか?


21

という名前のファイルがたくさんあります

sequence_1_0001.jpg  
sequence_1_0002.jpg  
sequence_1_0003.jpg  
...

およびファイル名

sequence_1_0001.hmf  
sequence_1_0002.hmf  
sequence_1_0003.hmf  
...

およびファイル名

sequence_2_0001.jpg  
sequence_2_0002.jpg  
sequence_2_0003.jpg  
...

そして

sequence_2_0001.hmf  
sequence_2_0002.hmf  
sequence_2_0003.hmf  
...

「sequence_1」で始まり「.hmf」で終わるファイルを削除したいだけですが、数千のファイルがあるため、それらを1つずつ削除したくありません。prefilx 'sequence_1'で始まり、 '。hmf'で終わるすべてを削除することをrmコマンドに指定するにはどうすればよいですか?

現在、RedHat Linuxシステムを使用していますが、他のディストリビューションでも同様に行う方法を知りたいです。

回答:


28
rm sequence_1*.hmf

で始まり、sequence_1で終わるファイルを削除します.hmf


グロビングは、シェルがパターンを取得し、そのパターンに一致するファイル名のリストに展開するプロセスです。異なる正規表現と混同しないでください。あなたがほとんどの時間を過ごすならbash、Wooledge Wikiにはグロビング(パス名の展開)に関する優れたページがあります。最大の移植性が必要な場合は、代わりに/のパターンマッチングに関するPOSIX仕様をお読みください。


まれに、「引数リストが長すぎます」というエラーが発生した場合は、これに対処するBashFAQ 95ご覧ください。最も簡単な回避策は、エラーがなくなるまで、globパターンを複数の小さなチャンクに分割することです。あなたの場合、おそらく次のようにプレフィックス0から9でマッチを分割することで回避できます:

for c in {0..9}; do rm sequence_1_"$c"*.hmf; done
rm sequence_1*.hmf  # catch-all case

これは、「引数リストが長すぎます」エラーを回避する非常に賢い方法です。私の場合、2万個のファイルがあるので、0、..、20からforループを使用する必要があると思います。右?
ポール

@Paul正しい、リストを必要な数のチャンクに分割してください。ただし、ある時点findで推測とチェックよりもアプローチが簡単になります。
jw013

14

jw013の答えは正しいことですが、何千もの一致がある場合、そのコマンドは失敗する可能性がありますrm sequence_1_0001.hmf sequence_1_0002.hmf ...。シェルによって生成された拡張コマンドラインは単純に大きすぎる可能性があります。

Domが示唆したように、次の-deleteオプションも使用できますfind

find . -maxdepth 1 -type f -name 'sequence_1*.hmf' -delete

両方-maxdepth-delete、しばらくないでPOSIX標準はでかなり共通しているfind野生での実装。Linuxディストリビューションは一般的にGNUを使用しますがfind、これは確かにこれらのオプションをサポートしています。


2
可能であれば、-deleteオプションを使用して検索します。各ファイルに対して分岐しません
Dom

追加、乾杯。GNUのみですが、-delete最近のGNU および BSDシステムでサポートされるよう-print0です。そのため、より移植性が高い可能性があります(ただし、OPに違いはありません)。
役に立たない

少なくともOS Xのfindには-print0がありますが、POSIXには含まれていません。
-Lri

5
rm sequence_1_{0000..0999}.hmf
rm sequence_1_{1000..1999}.hmf
rm sequence_1_{2000..2999}.hmf
...

Bashでも機能します。


ブレースの拡張にはが必要bashです。ゼロパディング形式にはバージョン4が必要です。
jw013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.