7 天不工作后删除文件

Deleting files after 7 days not working

我正在尝试删除所有超过 7 天的文件。该命令正在运行但不正确。

 find '/files/tem_data/' -mtime +7 -exec rm -rf {} \+

它确实会删除文件,但不准确。

ls -Artl | head -n 2

find 确实删除了文件,但是当我运行 ls 命令确实包含应该删除的文件。例如今天是 11 月 7 日。该查找应在 11 月 1 日之前删除所有文件。它不是。该命令保留 10 月 30 日和 31 日的文件。如何删除超过 7 天的文件。

如果我 运行 3 分钟后找到命令。它首先删除日期为 10 月 30 日且时间为 3 分钟后的文件 运行。

这不是准确的答案,但您可以尝试将其作为示例。 find /path/to/ -type f -mtime +7 -name '*.gz' -execdir rm -- '{}' \;

或者另一种更快的命令是使用 exec 的 + 终止符而不是 \;:

find /path/to/ -type f -mtime +7 -name '*.gz' -execdir rm -- '{}' + 或

find /path/to/ -type f -mtime +7 -name '*.gz' -delete
  • find:用于查找 files/directories/links 等的 unix 命令。 /path/to/:开始搜索的目录。
    -type f: 只查找文件。
    -name '*.gz': 列出以 .gz 结尾的文件。
    -mtime +7:只考虑修改时间大于7天的。 -execdir ... \;: 对于找到的每个这样的结果,执行 rm 中的以下命令 -- '{}': 删除文件; {} 部分是 查找结果被替换为前一部分的位置。 -- 表示命令参数结束,避免以连字符
  • 开头的文件提示错误

.

来自man find

-atime n

  File  was  last  accessed  n*24  hours  ago.  When find figures out how many
  24-hour periods ago the file was  last  accessed,  any  fractional  part  is
  ignored,  so  to  match -atime +1, a file has to have been accessed at least
  two days ago.

这意味着您的命令实际上删除了 8 天或更多天前访问过的文件。

因为现在是

$ date
Tue Nov  7 10:29:29 PST 2017

find 要求文件早于:

$ date -d 'now - 8 days'
Mon Oct 30 11:29:05 PDT 2017

换句话说,保留 10 月 30 日后的一些文件是预期的行为并记录在案。

要考虑 find 向下舍入,只需使用 -mtime +6 即可。