You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用shell脚本移动目录成功但报No such file or directory错误

问题现象

编写shell脚本实现从源目录移动符合条件的目录(非文件)到目标目录,移动操作实际执行成功,但运行时收到find命令相关的路径不存在报错。
报错示例:
find: '/u01/app/oracle/diag/asm/+asm/+ASM1/trace/cdmp_dir_30days': No such file or directory

脚本输出

find /u01/app/oracle/diag/asm/+asm/+ASM1/trace/ -name 'cdmp*' -mtime +7 -exec mv '{}' /home/oracle/dba/backup/logs/l01nsvl-dtdao01/diag/asm/+asm/+ASM1/trace ';'

find: `/u01/app/oracle/diag/asm/+asm/+ASM1/trace/cdmp_dir_30days': No such file or directory
find: `/u01/app/oracle/diag/asm/+asm/+ASM1/trace/cdmp_dir_180days': No such file or directory
find: `/u01/app/oracle/diag/asm/+asm/+ASM1/trace/cdmp_dir_7days': No such file or directory

手动执行输出

[oracle@l01nsvl-dtdao01:+ASM1:/u01/app/oracle/diag/asm/+asm/+ASM1/trace]$ ls -ltr $SOURCE
total 3660
drwxr-----. 2 oracle oinstall    4096 Mar 12  2019 cdmp_dir_180days/
drwxr-xr-x. 2 oracle oinstall   20480 Aug 29 05:17 cdmp_dir_30days/
drwxr-xr-x. 2 oracle oinstall   36864 Sep 18 13:22 cdmp_dir_7days/
-rw-r-----. 1 oracle oinstall 3664330 Sep 27 10:52 alert_old.log
-rw-r-----. 1 oracle oinstall    2899 Sep 28 14:52 alert_+ASM1.log
-rwx------. 1 oracle oinstall     230 Sep 28 15:11 b*
-rwx------. 1 oracle oinstall     395 Sep 28 15:25 a*

[oracle@l01nsvl-dtdao01:+ASM1:/u01/app/oracle/diag/asm/+asm/+ASM1/trace]$ ls -ltr $TARGET
total 0

[oracle@l01nsvl-dtdao01:+ASM1:/u01/app/oracle/diag/asm/+asm/+ASM1/trace]$ find /u01/app/oracle/diag/asm/+asm/+ASM1/trace/ -name 'cdmp*' -mtime +7 -exec mv '{}' /home/oracle/dba/backup/logs/l01nsvl-dtdao01/diag/asm/+asm/+ASM1/trace ';'
find: `/u01/app/oracle/diag/asm/+asm/+ASM1/trace/cdmp_dir_30days': No such file or directory
find: `/u01/app/oracle/diag/asm/+asm/+ASM1/trace/cdmp_dir_180days': No such file or directory
find: `/u01/app/oracle/diag/asm/+asm/+ASM1/trace/cdmp_dir_7days': No such file or directory

[oracle@l01nsvl-dtdao01:+ASM1:/u01/app/oracle/diag/asm/+asm/+ASM1/trace]$ ls -ltr $SOURCE
total 3600
-rw-r-----. 1 oracle oinstall 3664330 Sep 27 10:52 alert_old.log
-rw-r-----. 1 oracle oinstall    2899 Sep 28 14:52 alert_+ASM1.log
-rwx------. 1 oracle oinstall     230 Sep 28 15:11 b*
-rwx------. 1 oracle oinstall     395 Sep 28 15:25 a*

[oracle@l01nsvl-dtdao01:+ASM1:/u01/app/oracle/diag/asm/+asm/+ASM1/trace]$ ls -ltr $TARGET
total 88
drwxr-----. 2 oracle oinstall   256 Mar 12  2019 cdmp_dir_180days/
drwxr-xr-x. 2 oracle oinstall 36864 Aug 29 05:17 cdmp_dir_30days/
drwxr-xr-x. 2 oracle oinstall 45056 Sep 18 13:22 cdmp_dir_7days/

原因说明

find命令默认会递归遍历目标目录的所有子目录层级,当匹配到cdmp开头的目录后,会先执行mv操作把目录移走,后续find尝试进入该目录继续遍历内部内容时,发现目录已经不存在,就会抛出路径不存在的报错。这个报错属于执行逻辑的正常提示,不影响目录移动的实际结果。

修复方案

方案1(推荐)

给find命令添加-maxdepth 1参数,限制只扫描目标目录的当前层级,不进入子目录遍历,同时添加-type d参数确保只匹配目录,符合使用需求,修改后的命令如下:

find /u01/app/oracle/diag/asm/+asm/+ASM1/trace/ -maxdepth 1 -type d -name 'cdmp*' -mtime +7 -exec mv '{}' /home/oracle/dba/backup/logs/l01nsvl-dtdao01/diag/asm/+asm/+ASM1/trace \;

方案2

先将find匹配到的所有目标路径输出到临时列表,再遍历列表执行移动操作,避免find遍历过程中目录被移除的冲突。


内容的提问来源于stack exchange,提问作者Syed Ali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 11:06:03