如何仅列出不在“.git”目录子路径上的目录?

如何仅列出不在“.git”目录子路径上的目录?

我只想列出当前路径上 .git/ 目录之外的目录。

我正在尝试这个:

find . -path "**/.git" -prune -o -print -type d

.git 目录被排除在外,但该代码段还列出了文件。但它不应该像我指定的那样-type d。如何使该find实用程序按照我所描述的方式运行?

答案1

-print您以前使用过-type d,因此find打印所有不满足第一个表达式的内容。

你想交换它们:

find . -path '*/.git' -prune -o -type d -print

或仅使用谓词,因此您可以省略-print

find . ! \( -path '*/.git' -o -path '*/.git/*' \) -type d

另请注意,您只需要使用一个星号*/.git,双星号**对于模式匹配没有特殊含义find。你可以通过使用-name而不是使它更简单,更便携并且稍微更快-path

find . -name .git -prune -o -type d -print

答案2

由于缺乏对该find命令的了解,我只是使用一种效率较低但很可能同样有用且可能更具可读性的单行代码,其中还涉及grep

find . -type d | grep -v "/\.git"

相关内容