Linux 快速查找具有给定glob的所有dir的方法

Linux 快速查找具有给定glob的所有dir的方法,linux,bash,shell,Linux,Bash,Shell,我有以下shell片段: find . \ -not \( \ \( \ -path ./vendor -o \ -path ./_\* -o \ -path ./.\* -o \ -path ./docs -o \

我有以下shell片段:

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