差异文件存在于两个不同的目录中

Sud*_*dar 279 unix shell diff

我有两个目录具有相同的文件列表.我需要使用该diff命令比较两个目录中的所有文件.是否有一个简单的命令行选项来执行它,或者我是否必须编写一个shell脚本来获取文件列表然后迭代它们?

Lau*_*ble 402

您可以使用该diff命令:

diff -bur folder1/ folder2/
Run Code Online (Sandbox Code Playgroud)

这将输出一个忽略空格的递归diff,具有统一的上下文:

  • b标志意味着忽略空格
  • u flag表示统一的上下文(前后3行)
  • r flag表示递归

  • 对于其他人想知道,`-b`忽略空格变化,`-u`给出3行缓冲. (27认同)
  • 如果你使用rub而不是bur,那就更容易记住这个命令,即`diff -rub folder1/folder2 /` (26认同)
  • 您可以通过下载[Win32的GNU实用程序](http://unxutils.sourceforge.net/)来访问`diff`命令. (8认同)
  • 如果你生活在寒冷的气候中,我会想象`-bur`很容易记住. (8认同)
  • 我还发现--brief选项很有用; 您将获得已更改文件的列表,并可以单独处理它们 (7认同)
  • “-urb”对于城市人来说也很容易记住。可惜我住在乡下。我想我会使用`-bru`(“bru”在法语中的意思是“儿媳”)。 (4认同)
  • 显然-ubr是需要乘车的最佳选择 (2认同)

小智 112

如果您只想查看不同的文件,可以使用:

diff -qr dir_one dir_two | sort
Run Code Online (Sandbox Code Playgroud)

选项"q"仅显示不同但不同的内容的文件,"sort"将按字母顺序排列输出.

  • 太好了!也可以有效地工作 - 即,如果整个子目录仅存在于其中一个目录中,则它会停止重复出现并仅报告子目录本身(没有后续内容)。很不错!! (4认同)
  • 这是一个非常好的第一步:看看有什么不同(如果有的话),然后对每对不同的文件进行详细的“比较”。如果只有一两个文件不同,则与数十个文件不同时,方法会大不相同。我可能会迷失在同时“比较”数十个文件的输出中! (2认同)

Cod*_*ain 18

Diff有一个选项-r可以做到这一点.

diff -r dir1 dir2


mik*_*iku 11

diff不仅可以比较两个文件,还可以通过使用该-r选项遍历整个目录树,递归地检查子目录和每个树中可比较点上发生的文件之间的差异.

$ man diff

...

-r  --recursive
        Recursively compare any subdirectories found.

...
Run Code Online (Sandbox Code Playgroud)


NO_*_*AME 7

如果您特别不想比较文件的内容,而只想检查两个目录中都不存在的文件内容,则可以比较由另一个命令生成的文件列表。

diff <(find DIR1 -printf '%P\n' | sort) <(find DIR2 -printf '%P\n' | sort) | grep '^[<>]'
Run Code Online (Sandbox Code Playgroud)

-printf '%P\n'告诉find不要用根目录作为输出路径的前缀。

我还添加了sort确保两次调用中文件的顺序相同的内容find

最后grep删除有关相同输入行的信息。

  • 对于“find”中没有“printf”支持的系统,例如Macos,可以尝试类似“diff &lt;(cd DIR1 &amp;&amp; find . | sort) &lt;(cd DIR2 &amp;&amp; find . | sort) | sort”的方法。grep '^[&lt;&gt;]'` (3认同)

Eam*_*nny 5

在过去 5-10 年里,当使用 git/svn 或磁盘上的多个 git/svn 实例时,这对我来说是最有用的东西之一,有人可能会觉得有用:

diff -burN /path/to/directory1 /path/to/directory2 | grep +++
Run Code Online (Sandbox Code Playgroud)

或者:

git diff /path/to/directory1 | grep +++
Run Code Online (Sandbox Code Playgroud)

它为您提供了所触及的不同文件的快照,而无需“减少”或“更多”输出。然后你只需对各个文件进行比较即可。