当前位置: > > > > 如何通过命令行查看目录下上千个文件?
来源:stackoverflow
2024-04-20 10:00:34
0浏览
收藏
有志者,事竟成!如果你在学习Golang,那么本文《如何通过命令行查看目录下上千个文件?》,就很适合你!文章讲解的知识点主要包括,若是你对本文感兴趣,或者是想搞懂其中某个知识点,就请你继续往下看吧~
问题内容
我已将超过 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 功能那样依赖于对文件/文件夹进行排序,因此效率更高。
解决方案
filepath.walk 可能出现的性能问题:
文件按词法顺序遍历,这使得输出具有确定性,但意味着对于非常大的目录,遍历可能效率低下。
使用 按文件系统顺序迭代文件:
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, ) } } }
以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持!更多关于Golang的相关知识,也可关注公众号。