linux find -exec rm -r 报No such file or directory
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命令的终止符,而不使用 ; (分号)
+ 和 ; 区别:
; 是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的状态码,并不符合我的场景。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Maven 虐我千百遍,我待 Maven 如初恋
前言 在如今的互联网项目开发当中,特别是Java领域,可以说Maven随处可见。Maven的仓库管理、依赖管理、继承和聚合等特性为项目的构建提供了一整套完善的解决方案,可以说如果你搞不懂Maven,那么一个多模块的项目足以让你头疼,依赖冲突就会让你不知所措,甚至搞不清楚项目是如何运行起来的.....OK,博主就曾经被Maven“伤害”过,那么该专题的目的就是:彻底搞定Maven! Thinking in Maven 回想一下,当你新到一家公司,安装完JDK后就会安装配置Maven(MAVEN_HOME、path),很大可能性你需要修改settings.xml文件,比如你会修改本地仓库地址路径,比如你很可能会copy一段配置到你的settings.xml中(很可能就是私服的一些配置)。 接下来,你会到IDEA或者Eclipse中进行Maven插件配置,然后你就可以在工程中的pom.xml里面开始添加<dependency>标签来管理jar包,在Maven规范的目录结构下进行编写代码,最后你会通过插件的方式来进行测试、打包(jar or war)、部署、运行。 上面描述了我们对...
- 下一篇
"轻"量级 Java Web 服务框架漫谈
博文太长了, 还是先说下概要: 框架"轻量"与否可以从两方面来看待: 1) 框架本身的体量 - 例如小 jar 无依赖的苗条框架; 2) 用户使用框架是否获得各种便利而无阻隔("隔" 的含义参考王国维先生的人间词话) 单单"轻量"二字不足以说明框架的特性和使用方式 一定要说"轻量", 老码农倾向与第二种 - 用户使用框架是否获得各种便利而无阻隔 为了"轻量"而刻意使框架苗条化有时候不足取. tl;dr 以下博客正文 1. Java Web 服务框架的前世今生 时光回到 2000 年中, 老码农坐在天津河川大厦 7 楼接手平生第一个 Web 服务项目, 采用的是最新(当年)的 Java Servlet 技术, 倒腾着精致(自认为)的结构来处理 HttpServletResponse 输出 (幽怨地看向 N 年之后 Beetl, 却看不到 Rythm 的模样); 半年后第二个 web 项目开坑的时候, 从 apache jarkata 中挖出了一个名叫 Velocity 的模板, 果断放弃自己的输出框架; 再一年半之后的第三个项目(代号 kasino), 不说了, 直接上一整套 Apach...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8编译安装MySQL8.0.19
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS关闭SELinux安全模块
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS8安装Docker,最新的服务器搭配容器使用
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7设置SWAP分区,小内存服务器的救世主