【发布时间】:2014-05-29 00:17:37
【问题描述】:
CentOS。需要查找最近 30 天内修改过的文件,以查看其中是否有任何感染了恶意软件。
我试过这个:
root@server [/home/someuser/public_html/]# find . -mtime +30
-exec ls -l {} > last30days.txt \;
但它似乎找到了一切,而不是过去 30 天。 22,000 个文件。
【问题讨论】:
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 是 older 超过 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,其格式与上述类似。
【讨论】:
exec 版本。您能否添加一个printf 示例并解释为什么它更好?我想它有更多的格式选项,是吗?
-printf 示例。
.,如find . -type f -mtime -30 -exec ls -l {} \;,它将在当前目录中进行搜索