linux中快速列出文件列表的多种方法总结

 更新时间:2017年10月10日 10:42:06   作者:魏守峰  
这篇文章主要给大家总结介绍了关于linux中如何快速列出文件列表的多种方法,分别介绍了walk、os.scandir、tree、find以及locate等方法,文中给出了详细的示例代码,需要的朋友可以参考借鉴,下面来一起看看吧。

前言

最近在工作中碰到一个很棘手的问题,需要读取出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命令。所以以上命令各有所长,按照自己的需求取舍。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

相关文章

  • 解决因文件权限导致git fetch命令执行失败的问题

    解决因文件权限导致git fetch命令执行失败的问题

    最近在工作中遇到一个问题,就是在在一个基于 git 的发布系统中拉取代码,发现无法拉取最新的提交记录,查找相关资料发现是因为文件权限的问题,所以这篇文章主要介绍了关于解决因文件权限导致git fetch命令执行失败的问题,需要的朋友可以参考下。
    2017-04-04
  • Linux环境部署DNF仓库以及配置NFS共享服务

    Linux环境部署DNF仓库以及配置NFS共享服务

    本文详细介绍了如何在Linux环境下部署DNF仓库和配置NFS共享服务,DNF仓库主要用于集中管理软件包,而NFS共享服务则用于多系统间的文件共享,文章涵盖了从仓库部署、软件包同步到NFS配置和客户端访问的全过程,为系统管理员提供了全面的指导
    2025-04-04
  • 完美解决linux下U盘文件只读的问题

    完美解决linux下U盘文件只读的问题

    下面小编就为大家带来一篇完美解决linux下U盘文件只读的问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12
  • 在Linux系统上安装Spring boot应用的教程详解

    在Linux系统上安装Spring boot应用的教程详解

    这篇文章主要介绍了在Linux系统上安装Spring boot应用,本文通过实例文字相结合的形式给大家介绍的非常详细,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2019-05-05
  • centos系统修改创建文件夹目录的显示颜色

    centos系统修改创建文件夹目录的显示颜色

    大家应该都知道在Linux系统中ls文件夹的痛苦我就不说了,为了不伤眼睛,一般ssh终端背景都用的黑色,文件夹又是深蓝色,每次看文件夹都要探头仔细去看。这篇文章给大家介绍如何修改改创建文件夹目录的显示颜色,有需要的朋友们可以参考借鉴,下面来一起看看吧。
    2016-11-11
  • Ubuntu 14.04设置开机启动脚本的方法

    Ubuntu 14.04设置开机启动脚本的方法

    这篇文章主要给大家介绍了Ubuntu 14.04设置开机启动脚本的方法,文中通过代码介绍的很详细,相信对大家的理解和学习具有一定的参考借鉴价值,有需要的朋友们下面来跟着小编一起学习学习吧。
    2016-12-12
  • linux下用cron定时执行任务的方法

    linux下用cron定时执行任务的方法

    呵呵,比较有用,网上摘抄的。留着备用吧。
    2008-06-06
  • CentOS7—HAProxy安装与配置详解

    CentOS7—HAProxy安装与配置详解

    这篇文章主要介绍了CentOS7—HAProxy安装与配置详解,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-01-01
  • NodeJs在Linux下使用的各种问题解决

    NodeJs在Linux下使用的各种问题解决

    本篇文章主要介绍了NodeJs在Linux下使用的各种问题解决,可以解决各种问题,具有一定的参考价值,有兴趣的可以了解一下。
    2017-01-01
  • Centos下安装Ansible的示例代码

    Centos下安装Ansible的示例代码

    本篇文章主要介绍了Centos下安装Ansible的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04

最新评论