Linux 快速查找具有给定glob的所有dir的方法
我有以下shell片段:Linux 快速查找具有给定glob的所有dir的方法,linux,bash,shell,Linux,Bash,Shell,我有以下shell片段: find . \ -not \( \ \( \ -path ./vendor -o \ -path ./_\* -o \ -path ./.\* -o \ -path ./docs -o \
find . \
-not \( \
\( \
-path ./vendor -o \
-path ./_\* -o \
-path ./.\* -o \
-path ./docs -o \
-path ./examples \
\) -prune \
\) \
-type f -name \*.go \
| sed 's|^./||' \
| xargs -n1 dirname \
| sort -u \
它可以工作,但运行需要4-5秒。我正在寻找如何使它更快的想法。具有单个*.go文件的任何目录都符合条件。输出必须只是目录名,并且必须是dir/subdir
而不是/dir/subdir
编辑:此目录树在数百个目录中有数千个文件。我希望找到O(数百)个匹配的目录
shell wizards,有什么好主意吗?我发现在文件中缓存此查找的结果要快得多,然后运行预查找以查看是否有目录比缓存更新
find . \
-not \( \
\( \
-path ./vendor -o \
-path ./_\* -o \
-path ./.\* -o \
-path ./docs -o \
-path ./examples \
\) -prune \
\) \
-type d \
-newer ${CACHE} \
-print -quit \
| wc -l
如果返回“1”,那么我需要运行慢速路径。大多数时候我不知道,所以我可以使用缓存。你能用语言描述一下你在做什么吗?您的
find
调用返回多少结果?后续运行find
将更快。另外,请查看find.的查询优化选项,并让我们了解您正在筛选的内容的规模。find的输出是什么-打印0 | xargs-0 ls-l | wc-l
?(或类似)。如果你搜索1000个文件,4-5秒对我来说很好。祝你好运。此目录树在数百个目录中有数千个文件。我希望找到O(数百)个匹配的目录。-O没有效果,但我有一个想法缓存结果,并对任何比缓存结果更新的目录进行初始查找。这是非常快(50毫秒),告诉我是否需要做更重的发现。
find . \
-not \( \
\( \
-path ./vendor -o \
-path ./_\* -o \
-path ./.\* -o \
-path ./docs -o \
-path ./examples \
\) -prune \
\) \
-type d \
-newer ${CACHE} \
-print -quit \
| wc -l