我只想列出当前路径上 .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"