使用 diff 并忽略空目录

Den*_*boy 5 diff

这是我的树

\n\n
\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 test\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 dir1\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 dir2\n\xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 file\n\xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 file2\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 test2\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 dir2\n        \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 file\n        \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 file2\n
Run Code Online (Sandbox Code Playgroud)\n\n

我用diffdiff -r test/ test2/

\n\n
Only in test: dir1\n
Run Code Online (Sandbox Code Playgroud)\n\n

所以唯一的区别是有一个空目录( dir1) in 其中test/不存在于test2/

\n\n

我想忽略空目录作为差异。所以我想在这种情况下 diff 告诉我 的内容与test/的内容相同test2/

\n\n

我怎样才能实现这个目标?

\n

Lud*_*sin 1

我找到了一种方法,但我对此并不满意。

diff可以被告知排除与模式匹配的文件。遗憾的是,该模式仅适用于文件名,因此我的解决方案可能会排除比预期更多的目录(以及文件)

在这里,fwiw:

diff $(find test -empty -type d -exec sh -c 'echo -n "-x $(basename $1) "' _ {} \;) -r test/ test2/
Run Code Online (Sandbox Code Playgroud)

我添加了以下命令

find test -empty -type d -exec sh -c 'echo -n "-x $(basename $1) "' _ {} \;)
Run Code Online (Sandbox Code Playgroud)

diff它输出前面带有排除选项-x的每个空目录的基本名称。对于您的示例树,它将输出:-x dir1