linux - 为什么 find piped to xargs mv 删除了我的文件?
问题描述
今天我经历了一件难以置信的事情。我的目标是将超过 7 天的文件 mv 到另一个目录。目录存在。我使用了命令:
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
保持不变。
推荐阅读
- machine-learning - 关于一种新型置信区间的问题
- javascript - Ajax 发送数据并获得响应,但不准确
- awesome-wm - 如何在 awesome-wm 中剪切由`:layout` 方法绘制的区域?
- excel - 将 Teradata SQL 查询(带有列别名)动态传递给 ODBC 查询时出现 Expression.Error
- python - IMAP4 库语法
- javascript - 从特定页面删除侧抽屉
- heroku - 错误 403:您无权访问此服务器上的 /
- objective-c - 我应该在视图控制器中编写 NSTimer 代码还是使用委托/通知模式编写单独的类?
- erlang - 调试 hackney 请求
- java - 解析器适用于某些 ArrayList,抛出 Expected BEGIN_OBJECT 但对其他人来说是 STRING