提高 find -exec 的性能...

提高 find -exec 的性能...

我需要目录中的子目录(而不是文件)列表,以便我可以将其传递给 Java 程序。所以我使用这个命令来获取 Linux 机器上的列表:

find /some_directory -depth -maxdepth 1 -mindepth 1 -exec basename {} \; > listfile.txt

然后我将其listfile.txt作为参数传递给 Java 程序。从 Java 程序本身获取列表目录存在一些问题,因此我正在这样做。但由于文件数量超过 200k,上述find命令需要花费大量时间(约 35 分钟)。

可以优化吗或者有更好的选择吗?

答案1

要仅打印文件名而不是路径,使用 GNU1 find,您可以替换-exec basename-printf '%f\n'.解释于GNUfind手册页:

%F

删除所有前导目录的文件名(仅最后一个元素)。

另外,如果您只想输出中的目录,您可能应该使用-type d选项:

find /some_directory -maxdepth 1 -mindepth 1 -type d -printf '%f\n' > listfile.txt

-depth是多余的,因为您只在一个深度 (1) 查找文件。

-maxdepth也是-mindepthGNU 扩展,但与 相反-printf,它们现在也出现在其他一些find实现中。

答案2

如果您想在目录中存储除.和 之外的条目列表,每行一个,则该命令及其选项的用途如下:../some_directoryls-A

ls -A /some_directory > listfile.txt

这还有对该列表进行排序的好处(使用 GNU ls,您可以使用 禁用排序-U)。

basename就您而言,这是非常低效的,因为您每个文件运行一个命令。

相关内容