【问题标题】:Deleting files older than x number of years or days删除超过 x 年或天数的文件
【发布时间】: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 对之后修改的文件进行排序。我将用我的命令尝试这个并发布结果..

标签: shell unix xargs


【解决方案1】:

所以在玩了一会儿命令之后,这是有效的命令。

find . -maxdepth 1 -type f ! -newermt "2018-10-16" -exec rm -v {} \;

这些标志也有助于您遇到这种情况。

-maxdepth 1 

仅表示该文件夹中的文件

-newermt 

用于在该日期或之后修改的文件..

! -newermt 

用于在上述日期之前删除文件。

我还添加了 -v 标志,因此我会看到文件的输出已被删除。

感谢所有帮助,这为我节省了很多时间..

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-16
    • 2015-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-21
    • 2012-03-26
    相关资源
    最近更新 更多