find命令:列出每个目录和子目录,但.git或.hg目录和子目录除外

时间:2013-01-11 04:06:15

标签: bash command find subdirectory

我尝试在我的工作目录中使用此命令

find . -type d  \( ! -name .git  -prune \) -o \( ! -name .hg  -prune \)

似乎不起作用?

删除修剪只会排除.git.hg目录,而不会排除其子目录

2 个答案:

答案 0 :(得分:4)

find . \( -name .git -o -name .hg \) -prune -o -type d -print

答案 1 :(得分:2)

我的答案与@ Barmar的答案基本相同,我赞成了:

find . \( -name .git -o -name .hg \) -prune -o \( -type d -print \)

关于此命令的一点解释可能对您有所帮助:

此处-o表示OR。当find找到与.git.hg匹配的文件名时,由于-prune选项而停止进一步搜索并评估为true,因此会跳过另一个-o {1}}分支(即目录打印)。这就是为什么只显示那些不包含.git.hg的目录。

您也可以在SO上提及此问题:How to use '-prune' option of 'find' in sh?