![如何列出服务器上 2020 年以来所有修改过的文件?](https://linux22.com/image/188248/%E5%A6%82%E4%BD%95%E5%88%97%E5%87%BA%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%202020%20%E5%B9%B4%E4%BB%A5%E6%9D%A5%E6%89%80%E6%9C%89%E4%BF%AE%E6%94%B9%E8%BF%87%E7%9A%84%E6%96%87%E4%BB%B6%EF%BC%9F.png)
我需要递归地列出从 / 开始的所有修改文件。只有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
)。