问题描述
今天,我经历了一些难以置信的事情。我的目标是将比7天新的文件刻录到另一个目录。该目录存在。 我使用了命令:
find ./* -newermt $(date +%Y-%m-%d -d '7 day ago') -type f -print | xargs -I '{}' mv {} ../update_error_handled
然后,令人难以置信的是文件消失了,我转到了ls -lA
使用的文件夹,但是没有找到我移动的任何文件。发生了什么? CentOS 7.0,没有目录挂载,缺少原始文件,尝试grep -r "content" /
-什么也没找到...。
那为什么它会表现得如此?
事先我启动了
find ./* -newermt $(date +%Y-%m-%d -d '7 day ago') -type f -print
返回:
./file66.xml
./file67.xml
...etc.
以这种方式丢失数据确实很糟糕。 需要说明的是:目录在移动文件之前已存在。目录不包含我今天尝试移动的文件,只有旧文件。
解决方法
您是否预先在../update_error_handled
创建了目录?
如果没有,那么您从文件中剩下的全部将是最后一个,称为../update_error_handled
。
为了避免此类错误,我总是通过在目标目录名称的末尾添加/.
来确保目标目录存在。
不安全的方法:
$ rm -rf file dest_dir
$ touch file
$ ls -ld file dest_dir
ls: cannot access 'dest_dir': No such file or directory
-rw-rw-r--. 1 u u 0 Sep 28 11:53 file
$ mv file dest_dir
$ ls -ld file dest_dir
ls: cannot access 'file': No such file or directory
-rw-rw-r--. 1 u u 0 Sep 28 11:53 dest_dir
使用不安全的方法,file
被重命名为名为dest_dir
的文件。
安全方法:
$ rm -rf file dest_dir
$ touch file
$ ls -ld file dest_dir
ls: cannot access 'dest_dir': No such file or directory
-rw-rw-r--. 1 u u 0 Sep 28 11:54 file
$ mv file dest_dir/.
mv: cannot move 'file' to 'dest_dir/.': No such file or directory
$ ls -ld file dest_dir
ls: cannot access 'dest_dir': No such file or directory
-rw-rw-r--. 1 u u 0 Sep 28 11:54 file
使用安全方法,mv
命令失败,文件file
保持完整。