我需要目录中的子目录(不是文件)列表,以便我可以将它传递给 Java 程序。所以我使用这个命令来获取 Linux 机器上的列表:
find /some_directory -depth -maxdepth 1 -mindepth 1 -exec basename {} \; > listfile.txt
Run Code Online (Sandbox Code Playgroud)
然后我将listfile.txt
其作为参数传递给 Java 程序。从 Java 程序本身获取列表目录存在一些问题,因此我正在这样做。但是上面的find
命令需要很多时间(~ 35 分钟),因为有超过 20 万个文件。
这可以优化还是有更好的选择?
seb*_*sth 10
要仅打印文件名而不是路径,使用 GNU¹ find
,您可以替换-exec basename
为-printf '%f\n'
. 在GNUfind
手册页中解释:
%F
删除任何前导目录的文件名(仅最后一个元素)。
此外,如果您只想要输出中的目录,您可能应该使用-type d
选项:
find /some_directory -maxdepth 1 -mindepth 1 -type d -printf '%f\n' > listfile.txt
Run Code Online (Sandbox Code Playgroud)
-depth
是多余的,因为您只能在一个深度 (1) 中找到文件。
¹-maxdepth
并且-mindepth
也是 GNU 扩展,但与 相反-printf
,它们现在也出现在其他一些find
实现中。
如果你想存储条目列表,除了.
和..
在/some_directory
目录中,每行一个,那就是在ls
命令中,-A
选项是:
ls -A /some_directory > listfile.txt
Run Code Online (Sandbox Code Playgroud)
这也有对该列表进行排序的好处(使用 GNU ls
,您可以使用 禁用排序-U
)。
在您的情况下,它非常低效,因为您basename
每个文件运行一个命令。