比较目录结构的最佳方法是什么?
我有一个备份实用程序,它使用同步。我想要说出源文件和备份文件之间的确切差异(就文件大小和上次更改日期而言)。
就像是:
Local file Remote file Compare
/home/udi/1.txt (date)(size) /home/udi/1.txt (date)(size) EQUAL
/home/udi/2.txt (date)(size) /home/udi/2.txt (date)(size) DIFFERENT
当然,该工具可以是现成的,也可以是 Python 脚本的想法。
非常感谢!
乌迪
答案1
您正在寻找的工具是差分。它的工作原理类似于结合 rsync 和 diff。它会创建一个补丁文件,您可以比较或分发它。
答案2
有些人出于不同的原因想要比较文件系统,因此我将在这里写下我想要的内容以及我如何进行比较。
我想了:
- 比较相同的文件系统与自身,即快照,做出改变,快照,比较。
- 添加或删除的文件列表,不关心内部文件的更改。
我做了什么:
第一个快照(before.sh
脚本):
find / -xdev | sort > fs-before.txt
第二张快照(after.sh
脚本):
find / -xdev | sort > fs-after.txt
比较它们(diff.sh
脚本):
diff -daU 0 fs-before.txt fs-after.txt | grep -vE '^(@@|\+\+\+|---)'
好处是,它使用几乎默认的系统二进制文件。通过传递一个回显文件路径的参数以及随后的 MD5 值,可以基于内容进行find
比较-exec
。
答案3
如果您不想安装其他工具...
for host in host1 host2
do
ssh $host '
cd /dir &&
find . |
while
read line
do
ls -l "$line"
done ' | sort > /tmp/temp.$host.$$
done
diff /tmp/temp.*.$$ | less
echo "don't forget to clean up the temp files!"
是的,可以使用 find 和 exec 或 find 和 xargs 来完成,就像在 for 循环中 find 一样容易。此外,您还可以美化 diff 的输出,使其显示“此文件在 host1 上,但不在 host2 上”之类的内容,但此时您可能还不如安装其他人正在谈论的工具……
答案4
diff -r
实际上效果很好。如果你只是想知道文件是否不同,而不是差异的实际内容,那么请执行diff -qr