我在 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 \)
(转义的)括号将\(
测试\)
(type
和name
) 以及相应的操作(分别为prune
和print
)组合在 OR ( -o
) 的左侧和右侧。
由于-o
优先级低于并置,因此如果您愿意,可以省略括号。许多find
实现还让您跳过最后的-print
.
find . -type d -name .hg -prune -o -type f -name "foo" -print
答案2
看一下ack
:http://betterthangrep.com/
除了拥有一组合理的默认排除文件夹(例如 .hg 是默认排除)之外,排除新文件夹也很容易:
ack --ignore-dir=.directory search_term
要将其带回您正在查找文件列表的用例,您可以使用该-f
选项,如下所示:
ack -f --ignore-dir=.directory
我从编写复杂的搜索/查找命令转向简单的 ack 命令。
提示:将常用的命令行选项(例如排除的文件夹)放入 .ackrc 文件中。
答案3
你可以试试
find \( ! -regex '.*/\.directory\(\|/.*\)' \)