2018-05-04 diff好玩的用法

[小技巧] diff 在比较两个目录时忽略 .svn 目录和.git目录:

于现在版本管理软件用的比较多,在用 diff 在比较两个目录时,通常我们并不需要去 diff 如 .svn 之类的目录下的文件。

所以可以用下面的方法来回避:

$ diff -r -x ".svn" src1/ src2/

这里 -x 选项的意思就是不匹配包含 .svn 的文件。

当然 .git 也可以采用同样的方式回避。

比如要排除 C 文件的话,可以复用 -x 选项。

比如:

$ diff -r -x ".svn" -x "*.c" src1/ src2/


[小技巧] 使用 diff 命令来比较标准输出

diff工具用于报告两个文件之间的差异,如果你需要找到一个或两个标准输出之间的差异,那么临时的命名管道是一个方便的手段。
下面是用bash shell来说明该技巧的一个简单的例子,你有两个文件,A和B:
$ cat A
Tara
Dawn
Anya
Willow

$ cat B
WILLOW
ANYA
DAWN
HARMONY
TARA

我们的任务是发现两个列表之间的差异,而无需创建新文件或编辑现有文件。为此,您可以通过sort和tr来规范字母的大小写,然后使用diff来实时检查标准输出。

$ diff -B <(sort A | tr [:lower:] [:upper:]) <(sort B | tr [:lower:] [:upper:])

2a3

HARMONY

<(...) 语法创建一个临时命名管道,这使得sort | tr 命令的标准输出像一个文件一样显示和动作,并允许diff对预期的输入类型进行操作。

为了好玩,你可以看到在进程中创建的临时文件:

dir <(sort A | tr [:lower:] [:upper:])
lr-x------ 1 crash daily 64 Mar 5 23:17 /dev/fd/63 -> pipe:[21483501]

这种技巧不限于diff。它也支持大多数以文件作为输入的命令。

有趣的是(令人沮丧的),在我的Mac OS X上的BASH shell它无法动作,有人知道为什么吗?更新:的确有人知道。Unixjunkie里有回答。下列的处理在OS X可以产生预期的输出,但试了用diff却不产生输出。
cat <(sort A | tr [:lower:] [:upper:]) <(sort B | tr [:lower:] [:upper:])

ANYA
DAWN
TARA
WILLOW

ANYA
DAWN
HARMONY
TARA
WILLOW


diff -y 像bcompare那样比较,每个文件在屏幕两侧

你可能感兴趣的:(2018-05-04 diff好玩的用法)