find命令重复访问已删除文件夹,报“No such file or directory”错误排查
问题原因与解决方法
错误原因
这个报错的核心是find命令的遍历逻辑:它在扫描目录树的过程中,会先将匹配到的.idea目录标记为待处理对象,同时可能已经把该目录加入了后续的遍历队列。当你通过-exec删除这个目录后,find后续尝试访问这个已经不存在的目录时,就会抛出“No such file or directory”错误。
解决方案
方案1:使用find原生的-delete选项(推荐)
GNU find自带的-delete选项会自动处理目录删除的顺序,并且在删除后不会再尝试访问已删除的目录,从根源避免报错。如果需要删除前打印目标目录,可搭配-print:
# 仅删除 find . -type d -name .idea -delete # 删除前打印目录 find . -type d -name .idea -print -delete
方案2:添加-prune阻止后续遍历
如果你的find版本不支持-delete,可以在命令末尾加上-prune参数,告诉find不要遍历匹配到的目录,这样就不会在删除后还尝试访问它:
find . -type d -name .idea -exec sh -c "echo {}; rm -rf {}" \; -prune
也可以简化成更简洁的写法:
find . -type d -name .idea -print -exec rm -rf {} \; -prune
内容的提问来源于stack exchange,提问作者user3477071
相关产品推荐
相关产品推荐

