すべての JPG ファイルを再帰的に削除し、「sample」を含むファイルを残す方法

すべての JPG ファイルを再帰的に削除し、「sample」を含むファイルを残す方法

.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 により、このテストは大文字と小文字を区別しなくなります。samplei-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

関連情報