使用 shell 脚本时出现"No such file or directory"错误,即使目录已成功移动到目标



我编写了一个脚本将目录(不是文件)从源目录移动到目标目录,但是即使移动本身成功,我也会得到以下错误:

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 /u01/app/oracle/diag/asm/+asm/+ASM1/trace/ -name 'cdmp*' -mtime +7 | od -c

我还建议只添加-type d标志来过滤目录。

最新更新