使用 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's-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.

相关内容