我有以下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(数百个)匹配的目录。
任何聪明的想法,O shell向导?
答案 0 :(得分:0)
我发现将此查找结果缓存到文件中要快得多,然后运行预查找以查看是否有任何目录比缓存更新。
find . \
-not \( \
\( \
-path ./vendor -o \
-path ./_\* -o \
-path ./.\* -o \
-path ./docs -o \
-path ./examples \
\) -prune \
\) \
-type d \
-newer ${CACHE} \
-print -quit \
| wc -l
如果返回“1”,那么我需要运行慢速路径。但是大部分时间我都没有,所以我可以使用缓存。