亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何通過命令行查看目錄下上千個文件?

如何通過命令行查看目錄下上千個文件?

Go
收到一只叮咚 2023-07-10 14:31:11
我已將超過 500 GB 的數據下載到 AWS 的單個目錄中。每當我嘗試訪問該目錄時,命令行都會掛起并且不向我顯示任何內容。我正在嘗試運行一些代碼,通過打印出每個文件的路徑來與文件交互,但命令行掛起,然后退出程序。該程序肯定會開始執行,因為“打印文件路徑”顯示在控制臺上。func main() {    fmt.Println("Printing file path's")    err := filepath.Walk(source,        func(fpath string, info os.FileInfo, err error) {            if !info.IsDir() && file path.Ext(fpath)==".txt" {                fmt.Println(fpath)            }         }    }}我應該如何處理能夠在命令行中查看所有文件的情況以及為什么該程序無法運行?更新:通過使用files, err := dir.Readdir(10)        if err == io.EOF {            break        }我能夠搶占目錄中的前 10 個文件夾/文件。使用循環,我可以繼續執行此操作,直到到達目錄末尾。這不像 walk 功能那樣依賴于對文件/文件夾進行排序,因此效率更高。
查看完整描述

1 回答

?
慕無忌1623718

TA貢獻1744條經驗 獲得超4個贊

filepath.Walk 可能存在的性能問題有明確記錄:

文件按詞法順序遍歷,這使得輸出具有確定性,但意味著對于非常大的目錄,遍歷可能效率低下。

使用os.File.Readdir按文件系統順序迭代文件:

Readdir 讀取與文件關聯的目錄的內容,并返回最多包含 n 個 FileInfo 值的片段,如 Lstat 按目錄順序返回的那樣。對同一文件的后續調用將產生更多的 FileInfo。

package main


import (

? ? "fmt"

? ? "io"

? ? "log"

? ? "os"

? ? "time"

)


func main() {

? ? dir, err := os.Open("/tmp")

? ? if err != nil {

? ? ? ? log.Fatal(err)

? ? }


? ? for {

? ? ? ? files, err := dir.Readdir(10)

? ? ? ? if err == io.EOF {

? ? ? ? ? ? break

? ? ? ? }

? ? ? ? if err != nil {

? ? ? ? ? ? log.Fatal(err)

? ? ? ? }


? ? ? ? for _, fi := range files {

? ? ? ? ? ? classifier := ""

? ? ? ? ? ? if fi.IsDir() {

? ? ? ? ? ? ? ? classifier = "/"

? ? ? ? ? ? }

? ? ? ? ? ? fmt.Printf("%v %12d %s%s\n",

? ? ? ? ? ? ? ? fi.ModTime().UTC().Truncate(time.Second),

? ? ? ? ? ? ? ? fi.Size(),

? ? ? ? ? ? ? ? fi.Name(), classifier,

? ? ? ? ? ? )

? ? ? ? }

? ? }

}


查看完整回答
反對 回復 2023-07-10
  • 1 回答
  • 0 關注
  • 128 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號