您好我正在查看目录中正在更改的文件我想获取每个文件的md5sum并将其写入文本文件。然后,我知道一个文件已经改变,我想再次运行它,所以我可以区分输出文件,看看究竟发生了什么变化。这是我尝试过的,但它不能正常工作。
此外,我不仅需要获取包含子目录的文件夹中每个文件的md5sum,我还需要它不遵循符号链接
#!/bin/bash
#
cd /sys/class
for i in $(find . -type f)
do
ls -lt "$i" >> /home/george/Desktop/before.txt
done
echo "Finished!"
感谢您的帮助
===编辑===
我把我的实际路径放进去了,因为我真的不需要隐藏它们。无论如何运行它只返回几个文件(下面输出的文件),这些文件夹中的文件意味着它不会进入子目录并找到这些文件。顺便说一下,我的bash生锈了
--w------- 1 root root 4096 Jun 20 03:03 ./gpio/export
--w------- 1 root root 4096 Jun 20 03:03 ./gpio/unexport
-rw-r--r-- 1 root root 4096 Jun 20 03:03 ./firmware/timeout
-r--r--r-- 1 root root 4096 Jun 20 03:04 ./drm/version
=== EDIT2 ===
不完全确定为什么没有找到其中一些文件 / SYS /类/背光/ intel_backlight /亮度
还有许多其他人认为有这么多文件因某种原因无法找到
答案 0 :(得分:13)
cd
是不必要的,而使用type -f
,您实际上已经绕过了符号链接。所以循环也是不必要的:
find /path/to/directory -type f -exec md5sum {} + >before.txt
如果find
年龄太大而无法支持-exec {} +
,请尝试使用-exec {} \;
。
对于md5sum
比较,您可以尝试简单地删除相同的行;
fgrep -vxf before.txt after.txt | less
这假设before.txt
中的列表符合fgrep
;但如果你正在处理几十万个文件顶部,它可能会应付。但是,这不会识别before.txt
中已删除的文件。
答案 1 :(得分:0)
如果您的文件列表大小足够小,您可以在内存中完成所有操作,您可以考虑通过哈希对before.txt进行排序。如果对after.txt
执行相同操作,则可以逐行逐行查找每个文件并确定匹配项,即使文件名已更改。您还可以跳过已删除或添加的文件,与您必须解释diff before.txt after.txt
如果使用文件修改日期是一个选项,您可以使用ls -lt | head
过滤掉最新文件并保留该文件。然后,当您想要检查更改时,再次ls -lt
并查看比您存储日期更新的任何内容。无论文件列表大小如何,这应该可以很好地工作,但是很容易受到修改上次修改日期的人(这需要root权限)