“diff——排除”是如何工作的?

“diff——排除”是如何工作的?

我试图用来diff比较两个目录树,同时忽略某些子目录,但我无法让它工作。这就是我的文件结构:

temp/
|-- d1/
|   |-- f1.txt
|   `-- ignoreme/
|       `-- f2.txt
`-- d2/
    |-- f1.txt
    `-- ignoreme/
        `-- f2.txt

我试图让它忽略d1/ignoremeand下的任何内容d2/ignoreme,但它不会这样做。

diff -qr --exclude=/home/ubuntu/temp/d1/ignoreme/ d1 d2
Files d1/ignoreme/f2.txt and d2/ignoreme/f2.txt differ

我也尝试过

diff -qr --exclude=/home/ubuntu/temp/d1/ignoreme/* d1 d2

diff -qr --exclude=/home/ubuntu/temp/d1/ignoreme/* --exclude=/home/ubuntu/temp/d2/ignoreme/* d1 d2

...但我总是得到相同的结果。

我该如何让它发挥作用?

答案1

GNU 的-x或选项采用文件名通配模式,每个文件和目录的名称都将与之匹配。如果模式与特定名称匹配,则该名称将被排除在比较之外。--excludediff

该模式应用于文件和目录的基本名称,而不是路径名,这意味着要排除您的ignoreme目录,您可以使用

diff -qr --exclude=ignoreme ...

这也将排除恰好是 的任何其他名称ignoreme

这类似于GNU 中的--exclude和工作方式--exclude-dirgrepgrep递归运行时,尽管 GNUgrep手册对此有更好的解释。

infoGNU 的文档diff拼写出来:

-x PATTERN
--exclude=PATTERN
比较目录时,忽略基名匹配的文件和子目录PATTERN

相关内容