【问题标题】:List files that have been modified for the last x days, excluding today列出最近 x 天(不包括今天)修改过的文件
【发布时间】:2016-03-08 12:20:20
【问题描述】:

这列出了最近一天(24 小时)修改过的文件-mtime -1,其名称中包含字符串“UGW”-name '*UGW*'

find ./ -mtime -1 -type f -name '*UGW*' -printf '%Tc %p\n' | sort

有没有一种简单的方法来修改它,以便我只列出最近 X 天但排除今天?

注意: 我在这里排序,但我认为这不是按时间戳 100% 正确排序。

EDIT1基于下面的分析器得到以下错误

:~/tmp$ find ./ -mtime -1 -type f -name '*' -printf '%Tc %p\n'                                                                    Tue 08 Mar 2016 12:25:01 NZDT ./compareKPIs-log
    Mon 07 Mar 2016 18:05:02 NZDT ./log-file
    Tue 08 Mar 2016 12:25:01 NZDT ./compareKPIs-error
    Mon 07 Mar 2016 18:05:02 NZDT ./backup_public_html_20160307.tgz


:~/tmp$ comm -13 <(find ./ -daystart -mtime -1 -type f   -printf '%Tc %p\n' ) <(find ./ -daystart -mtime -3 -type f   -printf '%Tc %p\n' )
    Sun 06 Mar 2016 18:05:00 NZDT ./backup_public_html_20160306.tgz
    comm: file 2 is not in sorted order
    Mon 07 Mar 2016 18:05:02 NZDT ./log-file
    comm: file 1 is not in sorted order
    Mon 07 Mar 2016 18:05:02 NZDT ./backup_public_html_20160307.tgz

【问题讨论】:

  • “今天”是什么意思? “从午夜开始”? “过去 X 天”是“现在 24 小时”还是日历天?
  • 当我说最后 x 天时,我的意思是,1 天将是昨天的全部,2 天将是截至昨天午夜的最后 2 天,从 2 天前的 00:00 开始,即将是 48 小时....等

标签: bash time find


【解决方案1】:

***编辑:执行此操作的实际方法:

find ./ -daystart -mtime -3 -type f  ! -mtime -1  -printf '%Tc %p\n'

用途:

  • ! -mtime -1 今天排除
  • -daystart 00:00 开始

真的很老套,但是呢

comm -13 <(find ./ -daystart -mtime -1 -type f   -printf '%Tc %p\n' | sort) <(find ./ -daystart -mtime -3 -type f   -printf '%Tc %p\n' | sort)

comm 的命令行选项是:

-1 suppress column 1 (lines unique to FILE1)

-2 suppress column 2 (lines unique to FILE2)

-3 suppress column 3 (lines that appear in both files)

【讨论】:

  • @HattrickNZ 这应该只是这里的评论,而不是对问题的编辑。
  • 对每个查找命令进行了排序,应该可以修复错误。还添加了执行此操作的实际方法。
最近更新 更多