我有以下的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 魔法师?
find
的后续运行无论如何都会更快。此外,还应查看find
的查询优化选项。 - sjsamfind . -print0 | xargs -0 ls -l | wc -l
的输出是什么?(或类似命令)。如果您要搜索数千个文件,4-5秒对我来说听起来不错。祝好运。 - shellter