我正在尝试查找在 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
仅列出修改过的文件(不同的校验和)