查找排除目录


13

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

find | less  

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

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

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

Answers:


14

在对类似find解决方案研究中,我发现了有关如何在sh中使用'find'的'-prune'选项的有用解释劳伦斯贡萨尔维斯Laurence Gonsalves)

您可以使用类似:

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实现还使您可以跳过final -print

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

1
我本来打算写我的解决方案,但事实恰恰是这样。就我个人而言,我将-prune第一组放在第一个括号内,而-type f -print在第二组放在第二个括号内,只是为了使and和/或运算更明显,但对于我来说,这似乎很容易理解。
me_and'Feb

由于@me_and的注释,我改进了括号(及其推理)。
fheub'2

2

看看ackhttp : //betterthangrep.com/

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

ack --ignore-dir=.directory search_term

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

ack -f --ignore-dir=.directory

我从编写复杂的搜索/查找命令切换为简单的ack命令。

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


根据find | less问题中的内容,OP正在寻找文件的简单列表。这对您有什么帮助?
CVn

@MichaelKjörling正如我在回答中所述,-f选项提供文件列表。
Brian Leathem

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.