显示 diff --exclude 工作吗?

d51*_*512 26 diff

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

temp/
|-- d1/
    |-- f1.txt
    |-- ignoreme/
        |-- f2.txt
|-- d2/
    |-- f1.txt
    |-- ignoreme/
        |-- f2.txt
Run Code Online (Sandbox Code Playgroud)

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

diff -qr --exclude=/home/ubuntu/temp/d1/ignoreme/ d1 d2
Files d1/ignoreme/f2.txt and d2/ignoreme/f2.txt differ
Run Code Online (Sandbox Code Playgroud)

我也试过

diff -qr --exclude=/home/ubuntu/temp/d1/ignoreme/* d1 d2
Run Code Online (Sandbox Code Playgroud)

diff -qr --exclude=/home/ubuntu/temp/d1/ignoreme/* --exclude=/home/ubuntu/temp/d2/ignoreme/* d1 d2
Run Code Online (Sandbox Code Playgroud)

但我总是得到相同的结果。我如何让这个工作?

Kus*_*nda 32

GNU的-xor--exclude选项diff采用文件名通配模式,每个文件和目录的名称将与之匹配。如果模式与特定名称匹配,则该名称将从比较中排除。

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

diff -qr --exclude=ignoreme ...
Run Code Online (Sandbox Code Playgroud)

这也将排除碰巧是ignoreme.

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

infoGNU的文档说明了diff这一点:

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

  • 感谢您指出“该模式应用于文件和目录的基名,而不是路径名”。这非常有帮助。 (7认同)