find命令过滤 no such_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的 -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相关推荐
- 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 ...
- find命令过滤 no such_Linux中find命令的用法入门
前言 Linux系统下的Find 命令具有很强大的搜索功能,可以遍历整个文件系统.所以 find 命令很耗资源,有时候甚至会耗费很长时间,因此建议把它放在后台执行. Find 命令格式如下所示: fi ...
- standard_init_linux.go:178: exec user process caused no such file or directory
golang docker build 制作完进项后运行报错 出现该问题的原因是编译的环境和运行的环境不同,可能有动态库的依赖 1.默认go使用静态链接,在docker的golang环境中默认是使用动 ...
- docker 异常:“fork/exec /proc/self/exe: no such file”
docker 服务不正常 [root@controller03 ~]# docker exec -it keystone bash rpc error: code = 2 desc = oci run ...
- linux 动态执行cp,Linux常用命令之cp、mv、rm、cat、more、head、tail、ln命令讲解
上一章节中,我们了解到了Linux系统的最基础的几个文件处理命令,核心的是ls命令,在今天这章中,我们来继续学习Linux对于文件操作相关的一些命令,比如复制.移动.删除.查看等命令. 1.cp 命令 ...
- git rm -r --cached_【Git】工作中99%能用到的git命令
分支操作 git branch 创建分支 git checkout -b 创建并切换到新建的分支上 git checkout 切换分支 git branch 查看分支列表 git branch -v ...
- rm ,rm -rf , rm -f,rm -r 以及rm 命令的其他参数命令
rm ,rm -rf , rm -f,rm -r 以及rm 命令的其他参数命令 1.rm -rf * 删除当前目录下的所有文件,这个命令很危险,应避免使用. 所删除的文件,一般都不能恢复! 2.rm ...
- Linux周测(一些简单命令touch cat mkdir cp mv rm的简单练习)
一.在/tmp目录下,新建目录director新建三个txt文件,分别命名filel,file2.file3 ,用vi编辑器分别在三个文件中输入内容. 用到touch命令,vi命令, mkdir 用 ...
- Linux命令 rm -rf报错 mv无效选项 --‘r‘
Linux命令 rm -rf报错 mv:无效选项 --'r' 错误原因 使用rm -rf命令删除文件夹时,报错:**"mv: invalid option – 'r' Try `mv - ...
最新文章
- 计算机组成实验六MIPS汇编器,杭电计组实验6-MIPS汇编器与模拟器实验.doc
- SQL SERVER2000存储过程调试
- Linux存储保护,谈谈Linux中的存储保护
- #define和const的区别
- Windows CE.0002.ERROR:Image is too large for current RAM and RAMIMAGE settings.
- SSM整合Druid数据库连接池
- 【技术贴】Please verify that the Microsoft Data Access
- python ftp编程_【编程】Python FTP
- mysql 导入1045错误_解决MyQL数据库中1045错误的方法——Windows系统
- 12篇学通C#网络编程——第一篇 基础之进程线程(转)
- 物联网技术在智慧城市建设应用中的难点与疑点
- iphone se卡贴教程
- 运行代码到一半不动了
- 如何判断自己适不适合学计算机?
- pytorch系列(八):猫狗大战3-单机多卡无脑训练
- 华为手机桌面有计算机的数字,华为手机桌面上信息图标上显示的数字角标如何关闭...
- 解忧云SMS短信发送系统服务平台源码+解密完美版
- cad线性标注样式修改在哪里_CAD标注样式如何设置?
- python输出图形效果的代码_python打印图形大全(详解)
- English常用短语