我想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
.