我试图在我的工作目录中使用这个命令
find . -type d \( ! -name .git -prune \) -o \( ! -name .hg -prune \)
似乎不起作用?
删除 prune 只会排除.git
or.hg
目录,而不是它们的子目录
我试图在我的工作目录中使用这个命令
find . -type d \( ! -name .git -prune \) -o \( ! -name .hg -prune \)
似乎不起作用?
删除 prune 只会排除.git
or.hg
目录,而不是它们的子目录
find . \( -name .git -o -name .hg \) -prune -o -type d -print
我的回答与@Barmar 的回答基本相同,我对此表示赞同:
find . \( -name .git -o -name .hg \) -prune -o \( -type d -print \)
关于这个命令的一点解释可能对你有帮助:
这里的-o
意思是OR
。当find
找到一个文件名匹配.git
or.hg
时,由于-prune
选项而停止进一步搜索并评估为true
,因此跳过另一个-o
分支(即目录打印)。这就是为什么只有那些不包含.git
或.hg
将显示的目录。
你也可以参考这个问题:How to use '-prune' option of 'find' in sh?