微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

差异:仅比较文件并忽略子目录

我正在尝试比较两个目录,每个目录都有一些文件一个子目录.有什么办法可以在这两个文件夹上运行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] 举报,一经查实,本站将立刻删除。

相关推荐