在diff -r期间排除套接字文件


0

diff 有一个选择 --recursive-r )在两个目录(其中的文件)之间进行比较。有没有办法 diff 忽略所有套接字文件和仅套接字文件?

我在用 diff --brief -r --no-dereference /var/ /media/mateusz/Database/tmp/duplicity_unpack/var/ 验证我的备份部分,我被像这样的条目充斥 Only in /var/lib/samba/private/msg.sock: 10001。这些文件是Duplicity无法备份的套接字文件 - 并且它不表示备份失败。

我知道我可能会编写自己的输出处理但它有可能存在错误,需要更多时间并且需要我维护文件系统中的套接字文件列表。

请注意,在比较中不应忽略空文件夹。

Answers:


1

我不认为这是可能的 diff 本身没有代码修改。你需要使用 find 列出所需的文件,然后您可以传递给它们 diff 没有递归:

find /var/ -type f -exec diff {} /media/mateusz/Database/tmp/duplicity_unpack{} \;

这只找到普通文件,因为我认为在调用时没有意义 diff 与任何其他类型,所以没有套接字,FIFO,目录,设备文件等。


我会尝试一下,但我担心它会因大量文件而死...
Mateusz Konieczny

你应该没有问题: diff 每个调用只有两个文件,和 find 对文件数量没有已知的限制,但我想必须对路径的深度和长度有一些极限。您可以列出根文件系统中的每个文件 find /所以 find /var/ 应该没有任何困难。
AFH

这有一个严重的问题 - 它对空文件夹是盲目的。由于某种原因,find将套接字文件视为目录( -type f -o -type d 带回套接字)。
Mateusz Konieczny

@MateuszKonieczny - 我根本不理解你的评论: find 匹配套接字 -type d (至少,不是在Ubuntu上),提问者想要 排除 插座和 diff 不处理目录(隐式使用 -r )。要查找套接字,请使用 -type s
AFH

“我发现,查找与-type d上的套接字(至少不在Ubuntu上)不匹配”(例如参见 superuser.com/review/suggested-edits/552975 )它导致列出他们
Mateusz Konieczny
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.