查找排除目录

查找排除目录

我在 Linux (Ubuntu) 上,当我执行以下操作时,我想排除某些目录(例如 .hg)

find | less  

我尝试以下方法从列表中排除 .hg 目录,但似乎不起作用。

find -type d \( ! -iname \.hg \)
find -type d \( ! -name \.hg \)
find -type d \( ! -iname .hg \)

如何.directory在查找命令中排除

答案1

研究类似的find解决方案我发现了有用的解释如何在 sh 中使用“find”的“-prune”选项?经过劳伦斯·贡萨尔维斯

你可以使用类似的东西:

find . \( -type d -name .hg -prune \) -o \( -type f -name "foo" -print \)

或(没有名字)

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

(转义的)括号将\(测试\)(typename) 以及相应的操作(分别为pruneprint)组合在 OR ( -o) 的左侧和右侧。

由于-o优先级低于并置,因此如果您愿意,可以省略括号。许多find实现还让您跳过最后的-print.

find . -type d -name .hg -prune -o -type f -name "foo" -print

答案2

看一下ackhttp://betterthangrep.com/

除了拥有一组合理的默认排除文件夹(例如 .hg 是默认排除)之外,排除新文件夹也很容易:

ack --ignore-dir=.directory search_term

要将其带回您正在查找文件列表的用例,您可以使用该-f选项,如下所示:

ack -f --ignore-dir=.directory

我从编写复杂的搜索/查找命令转向简单的 ack 命令。

提示:将常用的命令行选项(例如排除的文件夹)放入 .ackrc 文件中。

答案3

你可以试试

find \( ! -regex '.*/\.directory\(\|/.*\)' \)

相关内容