激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專(zhuān)注于服務(wù)器技術(shù)及軟件下載分享
分類(lèi)導(dǎo)航

Linux|Centos|Ubuntu|系統(tǒng)進(jìn)程|Fedora|注冊(cè)表|Bios|Solaris|Windows7|Windows10|Windows11|windows server|

服務(wù)器之家 - 服務(wù)器系統(tǒng) - Linux - linux中快速列出文件列表的多種方法總結(jié)

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

2022-02-19 19:20魏守峰 Linux

這篇文章主要給大家總結(jié)介紹了關(guān)于linux中如何快速列出文件列表的多種方法,分別介紹了walk、os.scandir、tree、find以及l(fā)ocate等方法,文中給出了詳細(xì)的示例代碼,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。

前言

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

多種實(shí)現(xiàn)方法

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

1、walk

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

2、os.scandir

python中的os.scandir方法官方解釋為快速讀取目錄,測(cè)試了一下速度相對(duì)walk而言是由提高,但是還是達(dá)不到要求,也需要自己寫(xiě)遞歸,代碼如下:

?
1
2
3
4
5
6
7
8
9
10
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

當(dāng)這兩種方法都行不通的時(shí)候我就開(kāi)始考慮才用非編程方法了。理論上來(lái)說(shuō)python的執(zhí)行效率已經(jīng)蠻高了,雖然可能達(dá)不到c或者c++的速度,但是相比java、C#來(lái)說(shuō)已經(jīng)夠快了,所以就沒(méi)有再考慮編程的方式,而是轉(zhuǎn)向linux系統(tǒng)原生的方式。

3、ls

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

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

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

4、tree

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

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

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

5、find

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

?
1
find src > 1.txt

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

6、locate

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

?
1
locate src > 1.txt

不同點(diǎn)在于無(wú)論src為相對(duì)路徑還是絕對(duì)路徑,其結(jié)果均為絕對(duì)路徑。

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

結(jié)論

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

總結(jié)

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

原文鏈接:http://www.jianshu.com/p/3a9c1800bce1

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 蜜桃成品人免费视频 | 国产精品视频一区二区三区四区国 | 一区二区久久电影 | 蜜桃麻豆视频 | 欧美一区二区三区中文字幕 | 午夜激情视频网站 | 久久大陆 | 性欧美暴力猛交69hd | 懂色av懂色aⅴ精彩av | 日本视频免费观看 | 国产午夜精品久久久久久久蜜臀 | 欧美成人免费小视频 | 宅男噜噜噜66国产免费观看 | 青热久思思 | 日韩做爰视频免费 | 免费一级欧美在线观看视频 | 久久国产精品免费视频 | 日本欧美在线播放 | 国产免费一区二区三区 | 精品国产九九九 | 久久久国产精品网站 | av在线免费在线观看 | 性欧美videos 另类喷潮 | 国产大片在线观看 | 水多视频在线观看 | 欧美一级做一级爱a做片性 毛片电影网址 | gogo全球大胆高清人露出91 | 91精品国产99久久久久久 | 国产瑟瑟视频 | 亚洲影视在线观看 | 99精品国产在热久久婷婷 | 国产精品视频一区二区三区四区五区 | 国产精品区一区二区三区 | 一本色道久久99精品综合蜜臀 | 免费午夜视频在线观看 | 欧美日韩在线播放一区 | 婷婷中文字幕一区二区三区 | 99久久久国产精品露出 | 国产亚洲精品综合一区91 | 日本看片一区二区三区高清 | 欧美黄色一级带 |