前言

这两天碰到一个很棘手的问题,需要读取出ubuntu系统中某个目录下所有文件,由于服务器中存储的文件实在太多,导致此过程效率十分低下,动辄需要等待一个小时之久,还只是一个目录。于是如何快速获取文件列表便是这两天的头等大事,折腾半天找到一个较为快速的方法,记录如下。

多种实现方法

尝试了多种方法,有编程的和非编程的。

walk

python的walk库能够递归的读取目录下所有文件,这个是最常规的方法,然而效率有些缓慢。实现很简单,不赘述。

os.scandir

python中的os.scandir方法官方解释为快速读取目录,测试了一下速度相对walk而言是由提高,但是还是达不到要求,也需要自己写递归,代码如下:

def scan_path(file_path, level = 3):
files = []
if level >= 0:
path = os.scandir(file_path)
for p in path:
if p.is_dir():
files.extend(scan_path(p.path, level - 1))
else:
files.append(p.path)
return files

当这两种方法都行不通的时候我就开始考虑才用非编程方法了。理论上来说python的执行效率已经蛮高了,虽然可能达不到c或者c++的速度,但是相比java、C#来说已经够快了,所以就没有再考虑编程的方式,而是转向linux系统原生的方式。

ls

最先想到的就是ls命令,使用如下命令

ls –l –R(或-lR) src > list.txt

此命令能够列出src目录下的所有文件,但是效率还是不够高,而且结果包含了目录信息以及文件信息,不太整齐,需要后续处理。

tree

tree命令本身用于列出文件系统的结构树,在设置一些参数的情况下也能够实现列出所有目录和文件的功能。

tree -afi -L 3 -o 2.txt --noreport src

-a列出所有文件,-f列出完整路径(结果为绝对路径或者相对路径与find用法一致),-i不画tree的结构线, -L列出多少层目录,-o输出到文件,--noreport不要最后的summary。

find

find命令本身是查找文件的命令,但是如果使用得当,能够快速列出目录下文件,命令如下:

find src > 1.txt

此命令速度足够快,基本能够满足需要了。find的结果相对当前src的路径,也就是说其每条结果的开头均是src,如果src为绝对路径,则结果为绝对路径,如果src为相对路径,则结果以此相对路径为开头。

locate

又Google了一下,发现locate与find的功能相似,locate也能够查找文件,于是猜想locate也能够实现此功能,试之,果然可以,写法都是一样的。

locate src > 1.txt

不同点在于无论src为相对路径还是绝对路径,其结果均为绝对路径。

使用time命令进行命令执行时间测试,发现find和locate时间基本相同,有时locate会稍微快一些,而tree命令则有些慢。

结论

以上均可取到文件夹下所有文件,使用walk和scandir最为方便与程序集成,但是速度稍微有些慢,find和locate命令速度较快,tree命令功能强大,但速度相对find和locate有些慢,此三者若要与python集成,则需要在程序中使用os.popen等管道机制来执行拼接的bash命令。所以以上命令各有所长,按照自己的需求取舍。


打个广告,年初我与朋友成立了一家公司,现长期招聘,如下:

公司名称:武汉一格空间科技有限公司

官网主页:http://www.phitrellis.com

公司简介:我们是一家初创公司,专注于地理信息系统,目前方向为研发一套地信大数据管理、可视化、分析平台

工作地址:甘肃兰州

招聘岗位:前端、后端均可

职位要求:没有特殊要求,只要你有能力,有拼搏进取的精神,能吃苦、肯学、肯上进,愿意与公司共同成长,我们都很欢迎

技术框架:前端主要用到React,后端主要用到Python、Scala,包含数据处理(numpy、pandas)、地信基础分析(geopandas、rasterio等)、Hadoop\Spark分布式框架。

薪资待遇:薪资面议,只要你足够优秀,我们愿意提供相应的薪资,公司各项福利优厚,工作环境宽松,不强制996,个人爱好和兴趣驱动。

联系方式:可以直接通过博客园联系,或Email:shoufengwei@phitrellis.com

linux下快速列出文件列表的方法的更多相关文章

  1. linux下查看某个文件位置的方法

    linux下查看某个文件位置的方法: 例如,不知道apache的配置文件httpd.conf的位置,可以有两种方法来查看: 1.find / -name httpd.conf2.locate http ...

  2. Linux下快速查找文件

    1 locate 查找内容.查找数据库,updatedb命令更新数据库 2 which 命令 3 find 路径 -name 查找内容.find命令会磁盘查找,比较耗时. 4 grep 查找内容一般为 ...

  3. linux下查找某个文件位置的方法

    一.通过文件名查找法: 举例说明,假设你忘记了httpd.conf这个文件在系统的哪个目录 下,甚至在系统的某个地方也不知道,则这是可以使用如下命令: find / -name httpd.conf ...

  4. [MAC] Mac OS X下快速复制文件路径的方法

    在windows上复制当前目录的路径有一个特别方便的方式,只需要用鼠标点击路径栏,它就会自动变成像”D:\Downloads\tmp”这样的路径,如果要复制文件路径,只需要将目录路径和文件名拼接起来即 ...

  5. linux下快速查找文件(转载)

    权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/xxmonstor/article/deta ...

  6. linux下tar.bz2文件的 解压缩方法

    一 使用bzip2解压缩命令进行解压缩: bzip2 -d  gcc-4.1.0.tar.bz2 二 上面解压完之后执行下面的命令. tar -xvf gcc-4.1.0.tar 或 tar -xvf ...

  7. linux下快速列出局域网中所有主机名(计算机名)的脚本

    最近有列出局域网中所有主机名的需求(SMB协议里的),但是findsmb命令总是列不全,搜了搜网上也没什么现成的解决方案,于是自己写了个python脚本 脚本会扫描局域网arp表中所有ip,并尝试解析 ...

  8. 【Linux】快速创建文件的命令方法

    [root@centos7 dir1]# ll total 0 -rw-r--r-- 1 root root 0 Aug 15 02:39 file1 -rw-r--r-- 1 root root 0 ...

  9. linux中快速清空文件内容的几种方法

    这篇文章主要介绍了linux中快速清空文件内容的几种方法,需要的朋友可以参考下 $ : > filename $ > filename $ echo "" > f ...

随机推荐

  1. 【JCP模式实战--ferrous-framework】ferrous前端开发框架邀您初体验

    一.简介 ferrous-framework是为了迎合微服务架构而封装的纯前端开发框架. 实现了一种介于单页面和多页面的开发模式,让大家根据自己的需要对单页面和多页面进行切换或者共存. 页面结构采用J ...

  2. 配置HAProxy支持https协议

    author:JevonWei 版权声明:原创作品 实现http重定向到https HAProxy 创建CA证书 [root@HAProxy ~]# cd /etc/haproxy/ [root@HA ...

  3. kindeditor上传图片时候,上传成功了,但是页面上却提示失败

    今天尝试着kindeditor做一个上传demo,碰到了一个日狗的问题,百度谷歌都没有答案,最后查看源码才发现问题所在,记录一下,福利大众. 碰到问题如下,图片后台明明上传成功了,返回信息也是正确的, ...

  4. new和newInstance区别

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp55     在初始化一个类,生成一个实例的时候:newInstance() ...

  5. 【找不到与请求 URI匹配的 HTTP 资源】(转)

    在.net下,创建一个HTTP服务,有很多方案,比较老ashx,一般处理程序(HttpHandler), Web Service SOAP协议的,数据格式是XML,HTTP协议         WCF ...

  6. 关于"设计模式“

    夜深了,人静了,该写点儿东西了.这是第一篇博客,写点儿对设计模式的粗浅理解吧.   什么是设计模式? 上学那会儿初次听到这个名字一点儿概念都没有,不知道它是用来干嘛的,感觉听上去挺抽象的一个东西. 工 ...

  7. System.Globalization.CultureInfo.InvariantCulture 解决不同地域字符串格式不同问题

    同样的DateTime.ToShortDateString()   在不同的地域输出格式不同 如在美国的 日期格式为 :  月-日-年 如在中国的 日期格式为 :  年-月-日 一些时候,这个格式就会 ...

  8. 转:【深入Java虚拟机】之三:类初始化

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/17845821 类初始化是类加载过程的最后一个阶段,到初始化阶段,才真正开始执行类中的Jav ...

  9. WEB跨域资源共享:Cross-origin Resource Sharing(CORS)

    跨域资源共享(CORS):浏览器同源策略中的同源指协议+域名+端口三者完全一致,其中任何一个不同即为跨域 1. 浏览器同源政策是隔离潜在恶意文件的安全机制,限制信息传递和使用的边界,不是信息的保密机制 ...

  10. 201521123114 《Java程序设计》第10周学习总结

    1. 本章学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 1. 创建线程方式: 定义Thread的子类 定义实现Runnable接口的类,实现run() 2. 调用s ...