我试图在我的工作目录中使用这个命令
find . -type d \( ! -name .git -prune \) -o \( ! -name .hg -prune \)
似乎不起作用?
删除 prune 只会排除.gitor.hg目录,而不是它们的子目录
我试图在我的工作目录中使用这个命令
find . -type d \( ! -name .git -prune \) -o \( ! -name .hg -prune \)
似乎不起作用?
删除 prune 只会排除.gitor.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找到一个文件名匹配.gitor.hg时,由于-prune选项而停止进一步搜索并评估为true,因此跳过另一个-o分支(即目录打印)。这就是为什么只有那些不包含.git或.hg将显示的目录。
你也可以参考这个问题:How to use '-prune' option of 'find' in sh?