【发布时间】:2018-11-12 15:43:32
【问题描述】:
我巨大的上传文件夹并试图删除旧文件,例如。超过 3 年的文件或在某个日期之前添加的文件,但由于某种原因,它最终会同时删除新旧文件。
这是我目前尝试过的命令
命令 1
find /home/user/uploads -maxdepth 1 -type f ! -newermt "2018-10-14 00:00:00" -exec rm -v {} \;
此命令会删除所有忽略 with 的内容! -newermt 或只是 - newermt
命令 2
find /home/user/uploads -maxdepth 1 -mtime +1095 -type f -print -exec rm -i {} \;
没有返回任何结果
命令 3
find /home/user/uploads -type f ! -newermt "2018-10-14 00:00:00" | xargs rm
这返回了一个错误“xargs:默认情况下不匹配的单引号引号对 xargs 来说是特殊的,除非你使用 -o 选项”
我无法弄清楚这些命令到底出了什么问题。我在 CentOS 系统上运行。
【问题讨论】:
-
find /home/user/uploads -maxdepth 1 -type f ! -newermt "2018-10-14 00:00:00"仅匹配早于2018-10-14 00:00:00"的文件是正确的。你说“这个命令会删除所有内容”——是否有比删除的文件更新的文件? -
是...它删除了在此日期之后创建的新文件,而不是在此日期之前创建的文件
-
好的,等一下。让我来给你做个测试。
-
创建一个
datetst目录,例如md datetst && cd datetst为 2018 年 10 月的每一天创建一个文件,例如for i in {1..31}; do touch -d "2018-10-$i" file_$i; done,现在让我们find . -maxdepth 1 -type f ! -newermt "2018-10-16" | sort并查看仅对应于日期1-16的文件被选择为不比"2018-10-16"更新,这是正确的。您是否根据不同的结果进行测试? -
是的,我在测试你的代码后得到了我想要的结果。它整理了 2018 年 10 月 16 日之前创建的文件。 ! -newermt 对之前的文件进行排序,而只是 -newermt 对之后修改的文件进行排序。我将用我的命令尝试这个并发布结果..