如何查找(或排除)与某个模式匹配的所有目录和子目录(在Linux中)?


17

我正在尝试使用Linux find命令查找路径中没有.svn(Subversion隐藏文件夹)的所有目录和子目录。我只能得到它来排除实际的.svn目录本身,但不能排除任何子目录。

这是我现在正在做的事情:

find . -type d \! -iname '*.svn*'

我也尝试过:

find . -type d \! iname '.svn' \! iname '.svn/*'

仅供参考,我试图使用find模式,以便可以将某些subversion属性应用于存储库中的所有目录,但不包括subversion隐藏文件夹及其子目录(通过将exec命令应用于find命令返回的目录) )..

TIA

Answers:


25
find . -type d -not \( -name .svn -prune \)

尽管它们似乎都可以使用,但我将继续使用它。
杰森·唐

我以前在查找时使用过-prune,但是我没有看到\(... \)技巧。谢谢。
罗里

您能说一说我想在不希望节点模块计数的情况下在node.js / express应用程序中如何工作吗?我尝试 find . -name '*.js' -not \( -name 'node_modules' -prune \) | xargs wc -l 没有成功...
切碎

为了响应有关Node.js / Express应用程序的@shredding并从find的结果中排除node_modules目录,这对我有用:find。-name'.test.js' - not(-wholename'* node_modules ')...鉴于我要运行的测试带有“ .test.js”后缀
mysterlune 2013年

这项工作没有了-type d吗?我喜欢搜索所有文件,但递归排除“git的”目录
詹姆斯米奇

6

那简单吗

find . -type d |  grep -v '.svn'

失去使用任何查找动作的能力。
David Pashley 09年

是的,但是一个漂亮的小sh循环又如何呢?:)用于FILE中的find . -type d | grep -v '.svn';做任何回声 完成
wazoox

6

-path找到的选项呢?

find . -type d ! -path '*.svn*'

1
错过了一个结束语。外界有可能通配符过于贪婪。
丹·卡利

2

找 。-path'./tmp'-prune -o .......


2

您可以使用:

find . -type d -not -wholename '*.svn*' 

它从答案的开头去除了* ...应该找到了。-类型d-非-wholename'/. svn/ '(即全名squote星号斜线点svn slash n星号squote)
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.