diff 不能递归工作

diff 不能递归工作

我正在尝试使用命令行实用程序递归地比较两个目录diff。我有两个文件夹diff1diff2,内容如下:

在此处输入图片描述

diff2是空的。但当我这样做时,diff -r diff1 diff2我只得到

$ diff -r diff1 diff2
Only in diff1: folder
Only in diff1: test.html

这很烦人。我需要做什么才能让其diff以递归方式工作?我试过了--recursive,但没有用。我在 El Capitan 上,adiff -v让我diff (GNU diffutils) 2.8.1

答案1

您遇到的行为是设计使然。我认为您无法获得想要的结果,除非您允许使用除 之外的其他工具diff。从您的评论中:

当我读到“递归”时,我假设该过程不会在第一级停止。

它不会因为第一级而停止。注意递归的含义:

使用以下函数在自己的代码中调用自己

(来源:这里;重点是我的)

假设你foo在和中diff1都有一个共同的子目录diff2。递归意味着你的原始命令diff -r diff1 diff2在某个时候调用

diff -r diff1/foo diff2/foo

好的,实际上,这很可能是通过单个进程中的子程序调用自身来完成的(但我猜实际调用diff可执行文件的实现是可能的)。从逻辑上讲,它仍然是这样的。

您有diff1/folder,但没有diff2/folder。您如何调用diff来比较这些?换句话说,应该<unknown_name>是什么,以便您从下面的表格中获得所需的输出?

diff -r diff1/folder diff2/<unknown_name>

没有<unknown_name>合适的。递归diff不能下降到,folder否则会变成类似递归ls或的东西find。递归lsfind不是它的工作。

从中学习之后,您仍然可以diff1/folder使用ls -R或(默认为递归)进行查询。finddiffOnly in diff1: folder

相关内容