
.jpg
ファイル名に「sample」が含まれるファイルを除いて、ディレクトリ ツリー内のすべてのファイルを検索して削除するにはどうすればよいでしょうか。
例えば :
a.zip -> keep it
b.jpg -> delete it
a-sample.jpg -> keep it
b-Sample.jpg -> keep it
答え1
ファイル名に がjpg
含まれるファイルを除いて、 . で終わるすべてのファイル (大文字と小文字は区別されません) を削除するには、次のようにします。sample
find . ! -iname '*sample*' -iname '*.jpg' -delete
これは、現在のディレクトリから始めて、ツリー内のすべてのディレクトリを再帰的に処理します。
使い方:
.
これは、現在のディレクトリから開始することを指定します。
! -iname '*sample*'
これは、名前に が
find
含まれるすべてのファイルを無視するように指示します。 in により、このテストは大文字と小文字を区別しなくなります。sample
i
-iname
-iname '*.jpg'
この条件は、前の条件と AND 結合され、 で終わるファイルを検索します
.jpg
。-delete
これは、
find
そのようなファイルをすべて削除するように指示します。
上記のコマンドを実行する前に、テストすることをお勧めします。次のコマンドを実行します。
find . ! -iname '*sample*' -iname '*.jpg'
これにより、関心のあるファイルが出力されます。このリストが適切であれば、-delete
追加してコマンドを再度実行します。
答え2
bashでは、
shopt -s extglob
否定一致を有効にするには:
rm !(*[Ss]ample*).jpg
サブフォルダも一致させるには、オンにします
shopt -s globstar
二重星を使用します。
rm **/!(*[Ss]ample*).jpg