Linux:查找命令性能问题



我需要某个目录中的文件列表,所以我使用以下命令在 linux 机器上查找文件:

find /some_directory -depth -maxdepth 1 -mindepth 1 -exec basename {} ;

但是这需要很多时间(~35分钟(,因为有超过20万个文件。可以优化还是有更好的选择?

您可以使用-printf来模拟basename,这将消除对任何其他进程的需求:

find /some_directory -maxdepth 1 -mindepth 1 -printf '%fn'

性能低是由于调用basename200,000 次的开销。在没有-exec选项的情况下运行find,并将输出通过管道传输到 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

最新更新