linux中快速列出文件列表的多种方法总结
作者:魏守峰 发布时间:2023-11-03 18:43:22
前言
最近在工作中碰到一个很棘手的问题,需要读取出ubuntu系统中某个目录下所有文件,由于服务器中存储的文件实在太多,导致此过程效率十分低下,动辄需要等待一个小时之久,还只是一个目录。于是如何快速获取文件列表便是这两天的头等大事,折腾半天找到一个较为快速的方法,记录如下,话不多说了,来一起看看详细的介绍吧。
多种实现方法
尝试了多种方法,有编程的和非编程的。
1、walk
python的walk库能够递归的读取目录下所有文件,这个是最常规的方法,然而效率有些缓慢。实现很简单,不赘述。
2、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系统原生的方式。
3、ls
最先想到的就是ls命令,使用如下命令
ls –l –R(或-lR) src > list.txt
此命令能够列出src目录下的所有文件,但是效率还是不够高,而且结果包含了目录信息以及文件信息,不太整齐,需要后续处理。
4、tree
tree命令本身用于列出文件系统的结构树,在设置一些参数的情况下也能够实现列出所有目录和文件的功能。
tree -afi -L 3 -o 2.txt --noreport src
-a列出所有文件,-f列出完整路径(结果为绝对路径或者相对路径与find用法一致),-i不画tree的结构线, -L列出多少层目录,-o输出到文件,--noreport不要最后的summary。
5、find
find命令本身是查找文件的命令,但是如果使用得当,能够快速列出目录下文件,命令如下:
find src > 1.txt
此命令速度足够快,基本能够满足需要了。find的结果相对当前src的路径,也就是说其每条结果的开头均是src,如果src为绝对路径,则结果为绝对路径,如果src为相对路径,则结果以此相对路径为开头。
6、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.jianshu.com/p/3a9c1800bce1
猜你喜欢
- 3月1日,百度即时通讯软件百度HI正式内测,百度CEO李彦宏在其博客上呼吁“大家很快就可以一起high了”的博日志,目标直指微软的MSN和腾
- DNS MX记录一定要放在A记录之前,否则和邮件后缀相匹配的域名没有指向邮件服务器,很有可能邮件服务器收不到邮件。DNS MX记录一定要放在
- 今天在使用VMware打算在机器中安装新的虚拟机时,出现“此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态”错误如下
- Godaddy-Linux主机帐户上的默认文档的有限顺序取决于你购买的主机帐户的类型,例如,Standard, ColdFusion, 或J
- 我思考了下自己的特长,主要有四块:经济形势分析、经济人物研究、股票技术分析、网站运营和SEO。那就从这四块入手吧,先拟定一个框架。一、经济形
- 一切本来都是那样的宁静,所有的网络服务都在默默地工作着。然而近一段时间来,经常有人打电话反映一个相同的问题:在接收E-Mail时,服务器端经
- 本人是从众多媒体玩家的视频中无意了解到了软路由,它的功能非常强大,你想要的不想要的上面都有,重点是软路由可以安装到各种设备中(各种盒子、虚拟
- 淘宝客已经升级为淘宝联盟了,据说有10亿块钱分给站长,大家就赶紧去抢吧,呵呵。淘宝客能让不少人赚到了钱,也有不少人花了相当多的时间去做也赚不
- 在地方网站中比较成功的往往是一些分类信息站点,例如新疆地区的乌鲁木齐网、内蒙古地区的找查发网站,都是以发布各种信息为主,极大的丰富和方便了当
- 说明:Zabbix监控服务端已经配置完成,现在要使用Zabbix对交换机进行监控。具体操作:以下操作在被监控的交换机上进行,这里以Cisco
- 中国游戏行业是一个悲情的行业,虽然他有着远超体育圈的关注和参与人群,但是在社会上它始终被定位在“小众”。其最大的一个表现就是,它应该是全中国
- RiS名人专访人物里,这次要访问的是「蓝色理想」BlueIdea 站长(以下简称Blue),他从1999年开始建立了蓝色理想社群,专为网页开
- Internet正以空前的速度深入千家万户,不少公司或个人在网络上建立起主页和站点。公司通过网站发布产品信息、提供服务、寻求商业契机;而个人
- 大家先来看看问题描述:新建虚拟机的列表中没有64位系统选项,如何解决?操作系统:Windows 7 64位;虚拟机:Oracle VM Vi
- 网络的迅速发展使宽带走入寻常百姓家,广大网络爱好者也勇于尝试,在自己的机器上建设自己的网站,那么选择什么系统呢?Win 2000漏洞百出,W
- 11月18日消息,盛大游戏(NASDAQ: GAME)今天宣布,其18基金旗下新生代网络游戏开发商悠游数码所开发的3D大型多人在线网络游戏《
- 监控硬件运行状况shell 监控cpu,memory,load average,记录到log,当负载压力时,发电邮通知管理员。原理:1.获取
- 花时间流连社交网站Facebook有助训练脑力,这是研究“工作记忆力”的苏格兰史特灵大学心理学家亚洛
- 如果没有经过适当的处理和优化,WordPress博客中将有很多内容重复的页面,而这些重复内容会不利于搜索引擎的索引。本文整理和归纳了关于“重
- 环境安装JAVA在这里使用yum来安装java的jdk,可以使用指令yum search java | grep jdk来查看yum下提供了