寻找无需末尾分号的find命令替代方案:递归先列后删指定文件
替代
find -name "*broken*" -exec rm '{}' ';' 的可行方案 方案1:先列文件再用xargs删除(避开分号)
先执行查找命令确认目标文件:
find -name "*broken*"
确认无误后,用xargs替代-exec完成删除,无需末尾分号:
find -name "*broken*" | xargs rm
如果文件名包含空格、换行或特殊字符,用更安全的版本:
find -name "*broken*" -print0 | xargs -0 rm
方案2:用find的-delete选项(一步实现先显示再删除)
如果你的find是GNU版本(绝大多数Linux发行版默认是),可以直接用-delete选项,同时加上-print先输出文件路径,全程不用-exec和分号:
find -name "*broken*" -print -delete
这个命令会先打印所有匹配的文件,再自动删除它们,完全满足你的需求。
方案3:Shell循环遍历(灵活可控)
如果需要更精细的控制(比如逐个确认),可以用循环:
# 先列出目标文件 find -name "*broken*" # 执行删除(文件名无特殊字符时可用) for file in $(find -name "*broken*"); do rm "$file"; done
若文件名含空格等特殊字符,改用安全的循环写法:
# 先列出 find -name "*broken*" # 安全删除 find -name "*broken*" -print0 | while IFS= read -r -d '' file; do rm "$file"; done
内容的提问来源于stack exchange,提问作者Sizzurpp
相关产品推荐
相关产品推荐

