是否有Linux Deep diff工具也可以比较文件属性?


17

是否有一个像diff这样的Linux工具,可以递归比较文件和目录,但是还可以进行比较:扩展属性,ACL,se上下文?


1
提供的答案可用于偶尔进行比较。但是,当测试软件时,它们不足以每小时进行多次此类比较。我可能倾向于修改diff源代码以包括这些比较。
2014年

Answers:


7

在使用rsync -aHAX --delete记住添加-n-i标志之前,我已经完成了此操作。

这有点违反直觉,但请忍受。main rsync命令是将两个目录同步到一起所需的命令。但是-n -i会导致它不同步(即进行空运行),只是打印出它将执行的操作以及原因。解析起来并不理想,但是您可以轻松获取文件名并通过管道传递至ls类似文件。

这将查看所有内容,包括mtime,日期等,以及不继续关注设备节点,套接字,命名管道等。上面的命令行也查看ACL和扩展属性。您可以通过将选项更改为rsync,,将其限制为一台设备-x,更改软链接和硬链接行为等来调整您要查看的内容。


2

janos已经说了怎么办:

find /a -exec stat -c '%A %C %F %g %u %s %Y %n' {} \; >a
find /b -exec stat -c '%A %C %F %g %u %s %Y %n' {} \; >b

diff -u a b

man 1 stat说:

%A     access rights in human readable form
%C     SELinux security context string
%F     file type
%g     group ID of owner
%u     user ID of owner
%s     total size, in bytes
%Y     time of last modification, seconds since Epoch
%n     file name

要比较文件内容,可以使用:

find -type f -exec md5sum '{}' ';' | sort | uniq --all-repeated=separate -w 33 | cut -c 35-

as described here: http://www.commandlinefu.com/commands/view/3555/find-duplicate-files-based-on-size-first-then-md5-hash

该解决方案不提供可行的解决方案。显示的差异是上下文无关的,很难阅读。我正在寻找可以显示文件名以及它有什么不同的东西。与两个发现完全不同的野兽没有区别。
Michael Gantz

1
GNU find具有stat内置的GNU的功能(并且比GNU stat早几十年)。您还需要在比较之前对输出进行排序。并且您需要(cd /a && find . ...)否则所有行都将因文件路径中的/avs 而有所不同/b
斯特凡Chazelas

0

这是我编写的用于比较扩展属性的快速bash脚本。它打印出每个文件名,然后打印出属性中的所有差异:

cd a
export relpath=[path/to/b/from/a]

for filename in $(find .);
do
    echo $filename;
    diff <(xattr -l $filename) <(xattr -l $relpath/$filename);
done

从另一个答案中借用,我们可以将其修改为stat代替xattr

for filename in $(find .);
do
    echo $filename;
    diff <(stat -c '%A %C %F %g %u %s %Y' $filename) <(stat -c '%A %C %F %g %u %s %Y' $relpath/$filename);
done
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.