我需要某个目录中的文件列表,所以我使用这个命令在linux机器上查找文件:
find /some_directory -depth -maxdepth 1 -mindepth 1 -exec basename {} \;
但由于文件超过200,000,所以需要花费大量时间(约35分钟)。这可以优化还是有更好的选择?
答案 0 :(得分:1)
低性能是由于调用basename
200,000次的开销。在没有find
选项的情况下运行-exec
并将输出通过管道输出到Python中的脚本或其他将路径名转换为基本名称的好语言,例如:
basename.py:
import os,sys
for line in sys.stdin:
print(os.path.basename(line), end='')
外壳:
find /some_directory -maxdepth 1 -mindepth 1 | python basename.py
答案 1 :(得分:1)
您可以使用-printf
模拟basename
,这将消除对任何其他流程的需求:
find /some_directory -maxdepth 1 -mindepth 1 -printf '%f\n'