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

标签:linux,文件列表
0
投稿

猜你喜欢

  • 百度对垃圾站处理的根源与影响分析

    2008-12-01 04:06:00
  • 中国商业网址经验谈之网站评论体系

    2009-02-03 08:42:00
  • Ubuntu 20.04最佳配置指南(新手必备)

    2023-07-26 20:34:17
  • 开放重定向:您的网站有没有被恶意地利用

    2009-02-18 17:04:00
  • 挑选VPS的几个考虑

    2008-12-25 13:35:00
  • 雅虎优化:次级页面、主域名与网页级别

    2007-09-23 08:29:00
  • PHPCMS 、帝国及织梦对比分析(十一)之采集功能

    2011-08-26 12:37:16
  • 八个技巧提高Google Adsense收入

    2009-04-22 15:49:00
  • Linux telnet命令的使用

    2023-02-18 15:18:56
  • 链接单元新功能:图片广告匹配

    2009-02-16 12:51:00
  • 如何避免你的Adsense帐号被锁定的技巧

    2009-01-23 13:16:00
  • 加一道防护网:Win2008的高级防火墙

    2009-08-29 10:06:00
  • IBM:从卖智力到卖能力

    2009-10-16 14:44:00
  • 百度k站规律总结

    2007-11-10 19:15:00
  • VMware Workstation 14 Pro安装Ubuntu 16.04教程

    2023-11-04 22:22:44
  • WEB2.0下自由网站设计者未来发展工作趋势

    2009-02-10 18:17:00
  • 教你使用Jenkins集成Harbor自动发布镜像

    2023-10-28 02:32:24
  • DISCUZ架构:AJAX之ajax.js 函数之一

    2009-02-14 08:29:00
  • Linux命令学习总结:详解shutdown命令

    2021-08-05 23:39:54
  • WIN2003服务器安全配置终极技巧(4)

    2007-11-21 14:14:00
  • asp之家 网站运营 m.aspxhome.com