简单:测试文件时间属性

简单:测试文件时间属性

我正在尝试查找在 Linux 服务器位置中最近一小时内创建、复制、移动或修改的新文件/home/user/

我想知道以下命令是否是涵盖所有情况(创建、复制、移动或修改)的最佳方式,或者此命令是否不能涵盖所有情况,并且我可能会在搜索中丢失一些文件。
我会从搜索结果中排除所有只是执行或读取/访问的文件。

find /home/user/ -type f -newermt '-3600 seconds' -printf "%T+ %p\n" 

答案1

简单:测试文件时间属性

如果我严格坚持这个问题,那么我会使用

find /home/user/ -type f -cmin -60

我对此进行了测试。该命令还识别了文件在目录中移动的时间。
此命令不会报告文件访问情况。

更好:观看活动

不过,我猜你想在发生事件时做点什么。在这种情况下,你可能需要研究一下iwatch它依赖于inotify
它会在系统事件上触发,并允许您在事件发生时立即采取行动。
您不会错过只是暂时出现的文件。

这是一个“/etc/iwatch/iwatch.xml”文件,我对它进行了少许修改:

<?xml version="1.0" ?>
<!DOCTYPE config SYSTEM "/etc/iwatch/iwatch.dtd" >
<config>
  <guard email="root@localhost" name="IWatch"/>
  <watchlist>
    <title>Document signing</title>
    <contactpoint email="root@localhost" name="Administrator"/>
    <path type="recursive" syslog="on" alert="off" events="close_write" exec="sudo -u sign /home/sign/signpdf %f 'Non-modification et Origine du do
cument' >> /home/sign/pdf.log 2>/home/sign/pdf2.log">/home/sign/documents</path>
  </watchlist>
</config>

它比使用“find”更复杂,但也更细粒度。在上面的例子中,该命令仅在“close_write”上执行。因此,操作仍在写入的文件的风险降低了。

答案2

同意上面的评论,rsync 可能是更好的解决方案,具体取决于您要使用文件列表完成什么。这里有一个很好的答案,涵盖了很多内容,包括评论 https://serverfault.com/a/618740

rsync -zaic src/ dest/ | grep '^?c' | cut -d' ' -f2 --dry-run

仅列出修改过的文件(不同的校验和)

相关内容