【发布时间】:2021-01-13 19:43:12
【问题描述】:
今天我经历了令人难以置信的事情。我的目标是将超过 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.
以这种方式丢失数据真的很糟糕。 澄清一下:目录在移动文件之前就已经存在。目录不包含我今天尝试移动的文件,只包含较旧的文件。
【问题讨论】:
-
如果您想确定
mv将最后一个参数视为目录,请附加/.。示例:mv a b c d/. -
@ceving 谢谢你的建议!将
/(斜线)与/.(斜线点)附加到目录名称的优缺点是什么?两者似乎都比不附加任何东西更安全,但斜线点稍长,所以我更喜欢简单的斜线:d/而不是d/. -
任何可能的拼写错误,例如某处的多余空间,例如,目的地是
. ./update_error_handled? -
@TimurShtatland
d是文件或目录,d/.始终是目录。d/介于两者之间,需要稍微解释一下。但它也可能有效。