linux find -exec rm -r 报: No such file or directory

系统环境Ubuntu 16.04.3 LTS

在写批量制作docker镜像脚本时,先是将代码目录拷贝到对应的制作镜像的目录中,然后遍历镜像目录执行build,制作镜像,镜像build完成之后,再将代码目录删除,删除代码目录时用到find -exec组合命令,但是却报了:

No such file or directory

场景模拟:

zzfdeMacBook-Air:temp zzf$ mkdir testaaa

zzfdeMacBook-Air:temp zzf$ ls | grep testaaa

testaaa

zzfdeMacBook-Air:temp zzf$ find . -type d -name "testaaa" -exec rm -r {} \;

find: ./testaaa: No such file or directory

再次查找testaaa目录,发现testaaa目录确实被删除了。但为什么会报: No such file or directory呢?

zzfdeMacBook-Air:temp zzf$ ls testaaa

ls: testaaa: No such file or directory

查阅了find的资料后发现,find 默认是递归查找,在执行上面的删除目录的组合命令时, 它会遍历testaaa目录, 实际执行过程如下:

查询当前目录下的所有目录

进行模式匹配"testaaa", 匹配成功? 成功。

执行exec后的命令: rm -r testaaa

find 尝试进入到testaaa/目录中,查找目录或文件,并执行exec后面的命令

find 没有找到testaaa目录,返回ENOENT(No such file or directory)

解决方法有很多种,下面只列出常用方式:

1. 使用find的 -maxdepth OPTIONS:

-maxdepth levels:指定tests和actions作用的最大目录深度,只能为非负整数。可以简单理解为目录搜索深度,但并非如此。当前path目录的层次为1,所以若指定-maxdepth 0将得不到任何结果。

zzfdeMacBook-Air:temp zzf$ ls -d testaaa

testaaa

zzfdeMacBook-Air:temp zzf$

zzfdeMacBook-Air:temp zzf$ find . -maxdepth 1 -type d -name "testaaa" -exec rm -r {} \;

zzfdeMacBook-Air:temp zzf$ echo $?

0

zzfdeMacBook-Air:temp zzf$ ls -d testaaa

ls: testaaa: No such file or directory

2. 使用find的 -prune ACTIONS:

-prune: 不进入目录(告诉find,不要在要删除的目录中查找子目录或文件),所以可用于忽略目录,但不会忽略普通文件。没有给定-depth时,总是返回true,如果给定-depth,则直接返回false,所以-delete(隐含了-depth)是不能和-prune一起使用的

zzfdeMacBook-Air:temp zzf$ ls -d testaaa

testaaa

zzfdeMacBook-Air:temp zzf$ find . -type d -name "testaaa" -prune -exec rm -r {} \;

zzfdeMacBook-Air:temp zzf$ echo $?

0

zzfdeMacBook-Air:temp zzf$ ls -d testaaa

ls: testaaa: No such file or directory

3. 使用find的 -delete ACTIONS:

-delete,它隐含"-depth"选项

-depth: 搜索到目录时,先处理目录中的文件(子目录),再处理目录本身。对于"-delete"这个action,它隐含"-depth"选项

zzfdeMacBook-Air:temp zzf$ ls -d testaaa

testaaa

zzfdeMacBook-Air:temp zzf$ find . -type d -name "testaaa" -delete

zzfdeMacBook-Air:temp zzf$ echo $?

0

zzfdeMacBook-Air:temp zzf$ ls -d testaaa

ls: testaaa: No such file or directory

4. 使用 + (加号)作为find命令的终止符,而不使用 ; (分号)

+ 和 ; 区别:

; 是find遍历一次执行一次exec后面的command, 而 + 会拆分批量找到的文件或目录,批次运行命令,所以不会返回错误,而且当查找内容过多时, + 会降低CPU使用率。

zzfdeMacBook-Air:temp zzf$ ls -d testaaa

testaaa

zzfdeMacBook-Air:temp zzf$ find . -type d -name "testaaa" -exec rm -r {} +

zzfdeMacBook-Air:temp zzf$ echo $?

0

zzfdeMacBook-Air:temp zzf$ ls -d testaaa

ls: testaaa: No such file or directory

当然也可以使用 | (管道) + xargs 的方式:

find . -type d -name "testaaa" | xargs rm -r

但是当testaaa并不存在时,执行这个组合命令,会返回一个非0的状态码,并不符合我的场景。

find命令过滤 no such_linux find -exec rm -r 报No such file or directory相关推荐

  1. ssh_askpass: exec(/usr/libexec/ssh-askpass): No such file or directory

    Q: ssh_askpass: exec(/usr/libexec/ssh-askpass): No such file or directory A: install openssh for iph ...

  2. find命令过滤 no such_Linux中find命令的用法入门

    前言 Linux系统下的Find 命令具有很强大的搜索功能,可以遍历整个文件系统.所以 find 命令很耗资源,有时候甚至会耗费很长时间,因此建议把它放在后台执行. Find 命令格式如下所示: fi ...

  3. standard_init_linux.go:178: exec user process caused no such file or directory

    golang docker build 制作完进项后运行报错 出现该问题的原因是编译的环境和运行的环境不同,可能有动态库的依赖 1.默认go使用静态链接,在docker的golang环境中默认是使用动 ...

  4. docker 异常:“fork/exec /proc/self/exe: no such file”

    docker 服务不正常 [root@controller03 ~]# docker exec -it keystone bash rpc error: code = 2 desc = oci run ...

  5. linux 动态执行cp,Linux常用命令之cp、mv、rm、cat、more、head、tail、ln命令讲解

    上一章节中,我们了解到了Linux系统的最基础的几个文件处理命令,核心的是ls命令,在今天这章中,我们来继续学习Linux对于文件操作相关的一些命令,比如复制.移动.删除.查看等命令. 1.cp 命令 ...

  6. git rm -r --cached_【Git】工作中99%能用到的git命令

    分支操作 git branch 创建分支 git checkout -b 创建并切换到新建的分支上 git checkout 切换分支 git branch 查看分支列表 git branch -v ...

  7. rm ,rm -rf , rm -f,rm -r 以及rm 命令的其他参数命令

    rm ,rm -rf , rm -f,rm -r 以及rm 命令的其他参数命令 1.rm -rf * 删除当前目录下的所有文件,这个命令很危险,应避免使用. 所删除的文件,一般都不能恢复! 2.rm ...

  8. Linux周测(一些简单命令touch cat mkdir cp mv rm的简单练习)

    一.在/tmp目录下,新建目录director新建三个txt文件,分别命名filel,file2.file3  ,用vi编辑器分别在三个文件中输入内容. 用到touch命令,vi命令, mkdir 用 ...

  9. Linux命令 rm -rf报错 mv无效选项 --‘r‘

    Linux命令 rm -rf报错 mv:无效选项 --'r' 错误原因 ​ 使用rm -rf命令删除文件夹时,报错:**"mv: invalid option – 'r' Try `mv - ...

最新文章

  1. 计算机组成实验六MIPS汇编器,杭电计组实验6-MIPS汇编器与模拟器实验.doc
  2. SQL SERVER2000存储过程调试
  3. Linux存储保护,谈谈Linux中的存储保护
  4. #define和const的区别
  5. Windows CE.0002.ERROR:Image is too large for current RAM and RAMIMAGE settings.
  6. SSM整合Druid数据库连接池
  7. 【技术贴】Please verify that the Microsoft Data Access
  8. python ftp编程_【编程】Python FTP
  9. mysql 导入1045错误_解决MyQL数据库中1045错误的方法——Windows系统
  10. 12篇学通C#网络编程——第一篇 基础之进程线程(转)
  11. 物联网技术在智慧城市建设应用中的难点与疑点
  12. iphone se卡贴教程
  13. 运行代码到一半不动了
  14. 如何判断自己适不适合学计算机?
  15. pytorch系列(八):猫狗大战3-单机多卡无脑训练
  16. 华为手机桌面有计算机的数字,华为手机桌面上信息图标上显示的数字角标如何关闭...
  17. 解忧云SMS短信发送系统服务平台源码+解密完美版
  18. cad线性标注样式修改在哪里_CAD标注样式如何设置?
  19. python输出图形效果的代码_python打印图形大全(详解)
  20. English常用短语

热门文章

  1. POI操作Excel常用方法总结
  2. hive几种执行sql的方式总结
  3. Bootstrap list-group-item获取值
  4. 会员中心 收藏动态消息创作SELECT LAST_INSERT_ID() 的使用和注意事项
  5. Spark 运行机制
  6. 机器学习算法Python实现:tfidf 特征词提取及文本相似度分类
  7. 十道上市公司java面试试题
  8. 解决WORDPRESS评论时头像不显示的问题
  9. 程序员在囧途之我是一头牛
  10. 关于web工程项目路径的一些说明