欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

linux中快速列出文件列表的多種方法總結(jié)

 更新時間:2017年10月10日 10:42:06   作者:魏守峰  
這篇文章主要給大家總結(jié)介紹了關(guān)于linux中如何快速列出文件列表的多種方法,分別介紹了walk、os.scandir、tree、find以及l(fā)ocate等方法,文中給出了詳細的示例代碼,需要的朋友可以參考借鑒,下面來一起看看吧。

前言

最近在工作中碰到一個很棘手的問題,需要讀取出ubuntu系統(tǒng)中某個目錄下所有文件,由于服務(wù)器中存儲的文件實在太多,導(dǎo)致此過程效率十分低下,動輒需要等待一個小時之久,還只是一個目錄。于是如何快速獲取文件列表便是這兩天的頭等大事,折騰半天找到一個較為快速的方法,記錄如下,話不多說了,來一起看看詳細的介紹吧。

多種實現(xiàn)方法

嘗試了多種方法,有編程的和非編程的。

1、walk

python的walk庫能夠遞歸的讀取目錄下所有文件,這個是最常規(guī)的方法,然而效率有些緩慢。實現(xiàn)很簡單,不贅述。

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的執(zhí)行效率已經(jīng)蠻高了,雖然可能達不到c或者c++的速度,但是相比java、C#來說已經(jīng)夠快了,所以就沒有再考慮編程的方式,而是轉(zhuǎn)向linux系統(tǒng)原生的方式。

3、ls

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

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

此命令能夠列出src目錄下的所有文件,但是效率還是不夠高,而且結(jié)果包含了目錄信息以及文件信息,不太整齊,需要后續(xù)處理。

4、tree

tree命令本身用于列出文件系統(tǒng)的結(jié)構(gòu)樹,在設(shè)置一些參數(shù)的情況下也能夠?qū)崿F(xiàn)列出所有目錄和文件的功能。

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

-a列出所有文件,-f列出完整路徑(結(jié)果為絕對路徑或者相對路徑與find用法一致),-i不畫tree的結(jié)構(gòu)線, -L列出多少層目錄,-o輸出到文件,--noreport不要最后的summary。

5、find

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

find src > 1.txt

此命令速度足夠快,基本能夠滿足需要了。find的結(jié)果相對當前src的路徑,也就是說其每條結(jié)果的開頭均是src,如果src為絕對路徑,則結(jié)果為絕對路徑,如果src為相對路徑,則結(jié)果以此相對路徑為開頭。

6、locate

又Google了一下,發(fā)現(xiàn)locate與find的功能相似,locate也能夠查找文件,于是猜想locate也能夠?qū)崿F(xiàn)此功能,試之,果然可以,寫法都是一樣的。

locate src > 1.txt

不同點在于無論src為相對路徑還是絕對路徑,其結(jié)果均為絕對路徑。

使用time命令進行命令執(zhí)行時間測試,發(fā)現(xiàn)find和locate時間基本相同,有時locate會稍微快一些,而tree命令則有些慢。

結(jié)論

以上均可取到文件夾下所有文件,使用walk和scandir最為方便與程序集成,但是速度稍微有些慢,find和locate命令速度較快,tree命令功能強大,但速度相對find和locate有些慢,此三者若要與python集成,則需要在程序中使用os.popen等管道機制來執(zhí)行拼接的bash命令。所以以上命令各有所長,按照自己的需求取舍。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • Linux命令學(xué)習(xí)總結(jié):詳解reboot命令

    Linux命令學(xué)習(xí)總結(jié):詳解reboot命令

    這篇文章主要介紹了Linux命令學(xué)習(xí)總結(jié):詳解reboot命令,這個指令使用起來非常簡單,有興趣的可以了解一下。
    2016-11-11
  • error while loading shared libraries xx.so處理方法

    error while loading shared libraries xx.so處理方法

    一般我們在Linux下執(zhí)行某些外部程序的時候可能會提示找不到共享庫(error while loading shared libraries xx.so)的錯誤
    2013-04-04
  • linux crontab實例分析

    linux crontab實例分析

    cron是一個linux下的定時執(zhí)行工具,可以在無需人工干預(yù)的情況下運行作業(yè)。由于Cron 是Linux的內(nèi)置服務(wù),但它不自動起來,可以用以下的方法啟動、關(guān)閉這個服務(wù)
    2011-03-03
  • linux下cat命令連接文件并打印到標準輸出設(shè)備上

    linux下cat命令連接文件并打印到標準輸出設(shè)備上

    這篇文章主要給大家介紹了關(guān)于在linux下cat命令連接文件并打印到標準輸出設(shè)備上的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。
    2017-07-07
  • 詳解Linux time 命令的使用

    詳解Linux time 命令的使用

    這篇文章主要介紹了詳解Linux time 命令的使用,幫助大家更好的理解和學(xué)習(xí)linux,感興趣的朋友可以了解下
    2020-08-08
  • 入域的Windows訪問未入域的Samba服務(wù)方法介紹

    入域的Windows訪問未入域的Samba服務(wù)方法介紹

    這篇文章主要介紹了入域的Windows訪問未入域的Samba服務(wù)方法介紹,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • CentOS安裝jdk的幾種方法及配置環(huán)境變量方式

    CentOS安裝jdk的幾種方法及配置環(huán)境變量方式

    這篇文章主要介紹了CentOS安裝jdk的幾種方法及配置環(huán)境變量方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • CentOS 5.1下跑Mono和Asp.net的實現(xiàn)方法分享

    CentOS 5.1下跑Mono和Asp.net的實現(xiàn)方法分享

    由于想研究在linux下跑.net程序的可行性,于是嘗試在CentOS5.1下搭建Mono環(huán)境和Asp.Net的服務(wù)器。Asp.Net的服務(wù)器是采用mod_mono和Apache的方式搭建(Nginx的搭建尚未研究)
    2012-04-04
  • Linux環(huán)境變量配置的完整攻略

    Linux環(huán)境變量配置的完整攻略

    這篇文章主要給大家介紹了關(guān)于Linux環(huán)境變量配置的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用Linux具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • linux vi命令知識點用法總結(jié)

    linux vi命令知識點用法總結(jié)

    在本篇文章里小編給大家整理的是關(guān)于linux vi命令的相關(guān)知識點內(nèi)容,有需要的朋友們參考學(xué)習(xí)下。
    2019-10-10

最新評論