我试图用来diff
比较两个目录树,同时忽略某些子目录,但我无法让它工作。这就是我的文件结构:
temp/
|-- d1/
| |-- f1.txt
| `-- ignoreme/
| `-- f2.txt
`-- d2/
|-- f1.txt
`-- ignoreme/
`-- f2.txt
我试图让它忽略d1/ignoreme
and下的任何内容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
或选项采用文件名通配模式,每个文件和目录的名称都将与之匹配。如果模式与特定名称匹配,则该名称将被排除在比较之外。--exclude
diff
该模式应用于文件和目录的基本名称,而不是路径名,这意味着要排除您的ignoreme
目录,您可以使用
diff -qr --exclude=ignoreme ...
这也将排除恰好是 的任何其他名称ignoreme
。
这类似于GNU 中的--exclude
和工作方式--exclude-dir
grep
当grep
递归运行时,尽管 GNUgrep
手册对此有更好的解释。
info
GNU 的文档diff
拼写出来:
-x PATTERN
--exclude=PATTERN
比较目录时,忽略基名匹配的文件和子目录PATTERN
。