ファイル名にキーワードがないすべてのファイルを削除する

ファイル名にキーワードがないすべてのファイルを削除する

次の方法でファイルのリストがあります。

> file1.jpg 
> file1_orig.jpg 
> file2.jpg 
> file2_orig.jpg

拡張子が_orig.jpgのすべてのファイルを保持し、拡張子のないファイルを削除したいと思います。 Bashを使用してどのようにこれを達成できますか?

ベストアンサー1

Bashが利用可能拡張子ファイル名拡張子:

rm !(*_orig.jpg)

文法!(pattern):

与えられたパターンの1つを除くすべてと一致します。

したがって、これは一致しないすべてのファイル名に拡張され、*_orig.jpg削除することができます(または邪魔にならない場所に移動する可能性があります)。このオプションを有効にする必要がありますextglobshopt -s extglob(そうしないと、「イベントが見つかりません」という形式のエラーが発生します)が、通常はデフォルトで有効になっています。


あるいは、一時的にアーカイブしたいファイルだけを移動し、残りの部分を削除することもできます。

mkdir tmp
mv *_orig.jpg tmp
rm *.jpg
mv tmp/*.jpg .
rmdir tmp

使用するオプションがありますfindさらに:

find . -type f ! -name '*_orig.jpg' -exec rm '{}' +

これは、現在のディレクトリで名前のない(一般)ファイルを再帰的に見つけて*_orig.jpg削除します。ファイルがすべて1つのディレクトリに直接存在しない場合は、これが最良のオプションです。

おすすめ記事