专栏首页点滴积累linux下快速列出文件列表的方法

linux下快速列出文件列表的方法

前言

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 使用bokeh-scala进行数据可视化

    目录 前言 bokeh简介及胡扯 bokeh-scala基本代码 我的封装 总结 一、前言        最近在使用spark集群以及geotrellis框架(...

    魏守峰
  • 使用 opencv 将图片压缩到指定文件尺寸

    前言 图片压缩应用很广泛,如生成缩略图等。前期我在进行图片处理的过程中碰到了一个问题,就是如何将图片压缩到指定尺寸,此处尺寸指的是生成图片文件的大小。 我使用 ...

    魏守峰
  • 使用Python以优雅的方式实现根据shp数据对栅格影像进行切割

    一、前言        前面一篇文章(使用Python实现子区域数据分类统计)讲述了通过geopandas库实现对子区域数据的分类统计,说白了也就是如何根据一个...

    魏守峰
  • python 文件和路径操作函数小结

    1: os.listdir(path) //path为目录  功能相当于在path目录下执行dir命令,返回为list类型  print os.listdir(...

    py3study
  • 手机确诊流行病!辛辛那提大学开发微型设备,结果精确到秒

    目前来说,将两者结合在一个设备中是不实际的。科技公司不希望因给手机拟合医疗设备而被监管。

    大数据文摘
  • 总是没时间读书?有了它们,利用碎片时间就能轻松看完一本书 | 亲儿子 #25

    现代社会生活节奏快,每个人都很忙:忙着工作,忙着聚会,忙着玩手机。悲哀的是,很少有人愿意把一点点用来「忙」的时间,分给「读书」这项活动。

    知晓君
  • python- 动态加载目录下所有的类

    自动化测试框架中model层下有很多类,用来操作mysql的,使用的时候需要把全部的类加载进来,需要使用到动态加载类

    千往
  • 大庆的实体店为什么一定要做小程序?

    微信官方介绍说,小程序是一种“不需要下载安装即可使用的应用”。“无需安装、触手可及、用完即走、无须卸载。” 对于企业/商家来说,是一个可以搭载流量红利的入口!入...

    企鹅号小编
  • 腾讯TMQ在线沙龙回顾|FAT——专业服务于微信H5/小程序UI自动化测试

    活动介绍 TMQ第四十六期在线沙龙分享活动圆满结束啦! ? 本次分享的主题:FAT——专业服务于微信H5/小程序UI自动化测试 共有295位测试小伙伴报名参加...

    腾讯移动品质中心TMQ
  • 【晓头条】微信推出电子社保卡 / 跳一跳催生游戏外挂 / 滴滴也要做共享单车了

    1. 小程序开放朋友圈广告。本周,部分微信用户的朋友圈中开始出现小程序广告,点击广告卡片即可直接跳转小程序。微信官方表示该投放功能目前还在试点中,还未向所有小程...

    知晓君

扫码关注云+社区

领取腾讯云代金券