find - 获取目录中最近 30 天内修改的所有文件

标签 find centos

中央操作系统。需要查找最近 30 天内修改过的文件,以查看是否有任何文件感染了恶意软件。

我试过这个:

root@server [/home/someuser/public_html/]# find . -mtime +30
 -exec ls -l {} > last30days.txt \;

但不是最近 30 天,它似乎找到了一切。 22,000 个文件。

最佳答案

几个问题

  • 您并未将其限制为文件,因此当它找到匹配的目录时,它会列出其中的每个文件。
  • 如果没有像 bash -c '... > ...' 这样的东西,你就不能在 -exec 中使用 >。尽管 > 会覆盖文件,所以您还是希望重定向整个 find 而不是每个 -exec
  • +30 早于 30 天,-30 将在过去 30 天内修改。
  • -exec 确实不需要,您可以使用各种 -printf 选项列出所有内容。

像下面这样的东西应该可以工作

find . -type f -mtime -30 -exec ls -l {} \; > last30days.txt

-printf 示例

find . -type f -mtime -30 -printf "%M %u %g %TR %TD %p\n" > last30days.txt

这将以“权限所有者组时间日期文件名”格式列出文件。 -printf 通常比 -exec 在您不需要做任何复杂的事情的情况下更可取。这是因为不必为每个 -exec 执行子 shell,它会运行得更快。根据 find 的版本,您还可以使用 -ls,其格式与上述类似。

关于find - 获取目录中最近 30 天内修改的所有文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23070245/

相关文章:

java - 如何使用 Java 在文本文件中复制以特定字符开头和结尾的字符串

mysql - 如何在MySQL中使用FIND_IN_SET?

linux - Bash 脚本 - 以这种方式安装是好的做法吗?

file - centos删除n天前的文件

php - 如何在 CentOS 7 上使用 remi 添加 php 7 扩展

linux - 如何将iptables-service规则转换为firewalld规则?

java - 在 Java 控制台中预填充输入

file - 如何将find的结果传递给vim的argadd命令

shell - 使用 find 和 sed 将文件名添加到文件开头

magento - 如何在 SSH 上的 Magento 中安装扩展