我正在尝试比较两个目录,每个目录都有一些文件和一个子目录.有什么办法可以在这两个文件夹上运行diff,但不能在子目录上运行它?我尝试使用diff -x’* /’foo bar以及带有反斜杠的几个变体来逃避它们,但没有骰子.
子目录的实际名称可以更改,这就是为什么我不想指定确切的名称模式的原因.
谢谢!
解决方法:
如果您已经在区分两个特定的目录,那么我假设您知道它们的名称.在这种情况下,您需要动态确定的只是每个目录中包含的子目录列表.
假设您在父目录中;您具有这样的结构,并且想要区分foo和bar但想排除baz和quux:
+-- foo/
| |-- baz/
| |
| +-- file.txt
|
+-- bar/
|-- quux/
|
+-- file.txt
使用查找:
find * -mindepth 1 -type d
产生foo和bar内部的子目录列表:
foo/baz
bar/quux
此时,您可以将其写入临时文件:
find * -mindepth 1 -type d > exclude.txt
然后使用diff的-X标志,该标志允许您指定一个文件,该文件包含要从diff中排除的模式.
但是,这将无法正常工作,因为您需要从每个结果中分割出父目录名称.我们可以使用cut来做到这一点:
find * -mindepth 1 -type d | cut -d'/' -f2 > exclude.txt
这将产生以下结果:
baz
quux
因此,您现在可以使用:
diff -X exclude.txt foo bar
或者,如果您不想创建一个临时文件,则可以将其作为一个文件进行处理:
diff -uX <(find * -mindepth 1 -type d | cut -d'/' -f2) foo bar
希望这可以帮助 :)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。