如何列出服务器上 2020 年以来所有修改过的文件?

如何列出服务器上 2020 年以来所有修改过的文件?

我需要递归地列出从 / 开始的所有修改文件。只有2020年的文件。我已经用 find 尝试了几个命令,但它不起作用。

答案1

通过 GNU 实现find(通常在使用 Linux 作为内核的非嵌入式操作系统上找到)(尽管该语法不是 GNU 特定的,因为它实际上是作为 BSD 用户贡献的补丁首次引入的),您可以执行以下操作:

find / -type f -newermt 2020-01-01 ! -newermt 2021-01-01

请注意,它将包括最后修改时间为 2021-01-01 00:00:00.000000000 的文件,而不是最后修改时间为 2020-01-01 00:00:00.000000000 的文件。实际上,在精确的纳秒内创建文件几乎是不可能的,但对于从不以纳秒精度存储时间的档案中提取的文件,或者时间戳已被篡改了很长时间的文件,这种情况仍然可能发生touch -d 2020-01-01。例子。

GNU 的另一种方法find是:

find / -type f -printf '%TY%p\0' | LC_ALL=C sed -zn 's/^2020//p' | tr '\0' '\n'

也就是说,find打印文件的最后修改年份,后跟 NUL 分隔记录中的路径,然后用于sed过滤以 2020 年开头的记录。

对于find不支持 的实现-newermt,您可以使用标准谓词创建参考文件touch并与标准-newer谓词进行比较:

mkfifo first last
touch -d 2020-01-01 first
touch -d 2021-01-01 last
find / -type f -newer first ! newer last

(这里将它们创建为 fifo 文件而不是常规文件,因此它们不会被 选中-type f)。

相关内容