名前に部分文字列が含まれていない場合は、ファイルを削除する

名前に部分文字列が含まれていない場合は、ファイルを削除する

フォルダ内のファイルを削除するには、次のコマンドを使用しています。しかし、私のコマンドはすべてを削除することです。

ionice -c 3 find . -type f -print -delete

サフィックスがある場合は、ファイルを削除したくありません_y

私のフォルダの表示は次のとおりです。

123a.jpg -> Should delete
4567.jpg -> Should delete
7644_y.png -> Should not delete
12234_y.jpeg -> Should not delete
5753.jpg -> Should delete

私のコマンドはこれをどのように達成すべきですか?

答え1

あなたの例によると、以下を含む名前を除外したいと思います。_y サブストリング

find . -type f ! -name '*_y*' -print -delete

ionice -c 3必要に応じて前に使用しても構いませんが、何をしても構いませんfind。)

_yデフォルトの名前の末尾にのみファイルをアーカイブするには(したがって12234_y_.jpeg削除されます)、次のものを使用できます。

find . -type f ! -name '*_y.*' -print -delete

答え2

再帰サブディレクトリを具体的に使用する場合、findこの回答は適用されません。ただし、現在のディレクトリのファイルのみを削除する場合、bash関連のオプションは次のとおりです。

shopt -s extglob
rm -v !(*_y.*)

これには、パターンに一致する非ファイル(ディレクトリ)を削除しようとする追加の制限があります。

関連情報