findを使用してファイルの内容に基づいて条件を確認します。

findを使用してファイルの内容に基づいて条件を確認します。

find特定の大きなディレクトリツリーのすべてのコアファイルを削除したいと思います。

このために、特定のファイル名パターンを満たすファイルを一致させたいと思います。たとえば、次のようになります。

find . -name 'core*'

file...しかし、そのようなファイルが見つかったら、そのファイルに対してコマンドを実行して実際にコアダンプであることを確認したいと思います。たとえば、次のようになります。

file --brief --mime <filename> | grep -q 'application/x-coredump'

コマンドが成功したら、ファイルを削除したいと思います。これらすべてをfindで行うことができますか?

file重要なのは、動作が「ショートカット」であるということです。パターンと一致しない限り、コマンドを実行したくありません。コマンドを実行すると、速度が非常に遅くなるためです。

答え1

find+bash方法:

find / -type f -name "*core*" -exec bash -c \
'[[ `file -bi "$0"` =~ application/x-coredump ]] && echo rm "$0"' {} \;

echo「必須」ファイル名が見つかった場合は、呼び出しを削除してください。


より短い - find'を使用すると-deleteアクション:

 find / -type f -name "*core*" -exec bash -c \
'[[ `file -bi "$0"` =~ application/x-coredump ]]' {} \; -delete

答え2

確かに可能です:

find . -name '*.core' -type f -exec \
    sh 'if file -bi "$1" | grep -qw ^application/x-coredump; then printf "%s\n" "$1"; fi' \
    sh {} \;

結果が満足のいくものprintf "%s\n"に変わりますrm -f

関連情報