# 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
图解: