我需要一个shell命令来显示整个服务器上的最新修改文件和新文件(递归)并将它们回显到根目录中的txt文件中。
有人这样吗?
我试过
find / - mmtime 30 -printf "%AD %Ar - %p\n" 2> /dev/null | sort -r > /lastmodified.txt
将过去30天内所有修改过的文件的所有名称发布到root用户的txt文件中,但它只显示服务器本身的文件,而不是我网站上传到的目录。
提前谢谢 - 我不是专家,这是我到目前为止所发现的。这是相对紧急的,因为我需要这个来修复上周发生的黑客文件。
答案 0 :(得分:0)
来自http://content.hccfl.edu/pollock/Unix/FindCmd.htm:
find . -mtime 0 # find files modified within the past 24 hours
find . -mtime -1 # find files modified within the past 24 hours
find . -mtime 1 # find files modified between 24 and 48 hours ago
find . -mtime +1 # find files modified more than 48 hours ago
确保在-mtime -30
中只有一个'm'和一个减号,正如chorobas评论中所建议的那样,才能获得最近30天。 -mtime 30
将在30天前准确提供文件。
您可能希望使用选项-daystart
来获取从午夜开始的最近30天的文件,而不是仅仅30 * 24小时之前。使用%TD
和%Tr
代替%AD
和%Ar
来获取修改时间(而不是访问时间)。
最后的命令是:
find / -daystart -mtime -30 -printf "%TD %Tr - %p\n" 2> /dev/null | sort -r > /lastmodified.txt
请注意,排序将在1月中断,因为12在01之前排序。如果要确保日期始终有序,请使用例如时间定义%T+
(2012-11-29 + 21: 07:41.0000000000)或%Tu/%Tm/%Td %TH:%TM
(12/11/29 21:07)
答案 1 :(得分:0)
inotify-tools
怎么样?https://github.com/rvoicilas/inotify-tools/wiki#wiki-getting
http://linux.die.net/man/1/inotifywait
inotifywait示例2
#!/ bin / sh的
EVENT = $(inotifywait --format'%e'〜/ file1)
[$? != 0]&&出口
[“$ EVENT”=“修改”]&& echo'file modified!'
[“$ EVENT”=“DELETE_SELF”]&& echo'文件已删除!'
#etc ......