前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux命令:find . -type d -name "doc" -exec rm -rf {} \;报错分析及解决

Linux命令:find . -type d -name "doc" -exec rm -rf {} \;报错分析及解决

作者头像
醉生萌死
发布2018-11-05 15:10:25
4.8K1
发布2018-11-05 15:10:25
举报
文章被收录于专栏:醉生梦死醉生梦死

# mkdir doc # find . -type d -name "doc" -exec rm -rf {} \;  #虽然此处报错,却删除成功 # echo $?

原因分析     首先了解一个知识点,很容易被忽略,find会查找指定路径下的目录和文件及目录的子目录和子文件; find命令在查找第一个doc目录就将此路径传递给-exec后面的命令执行操作,从下面的这个图片可以看出,在查找到第一个doc路径后打印(-print)该路径,然后将该路径传递给后面的echo命令,那么也会再次打印该路径,故打印两次,执行完-exec后面的命令后,继续执行find命令,在刚才查找到doc路径下查找下一个名称为doc的命令。

    故,在执行命令: # find . -type d -name "doc" -exec rm -rf {} \; 将查找到的目录传递给rm进行删除,而此时doc目录已经删除,find又要在已删除的doc目录下进行继续搜索是否有名称为doc的目录,因已删除,故报错(find: `./doc': No such file or directory) 总结:   find将结果传递给-exec后的命令,然后继续执行find再次查找子目录     find命令会查找指定路径下的文件和目录及目录下的子文件和目录。

解决方法     # find . -type d -name "doc" | xargs rm -rf

图解:

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档