LoginSignup
15
15

More than 5 years have passed since last update.

Goで指定ディレクトリをトラバースする方法

Last updated at Posted at 2013-05-20

Goで指定ディレクトリをトラバースには、path/filepathパッケージWalk関数を使うのが簡単です。

Walk関数は第1引数にディレクトリのパスをstringで、第2引数には、ファイルまたはディレクトリが見つかったときに行う関数を渡します。

下記の例は、指定ディレクトリ内のファイル数およびファイルサイズの合計を計算する例です。第2引数で渡している無名関数内にて、FileInfoのIsDir()の結果がfalseであればファイルである、ということで、ファイル数とファイルサイズを取得しています。

main.go
package main

import (
    "fmt"
    "os"
    "path/filepath"
)


func main() {
    var size int64
    count := 0

    err := filepath.Walk("/path/to/count/files", func(path string, info os.FileInfo, err error) error {
        if err != nil {
            return err
        }
        if !info.IsDir() {
            count += 1
            size += info.Size()
        }
        return nil
    })

    if err != nil {
        fmt.Println("Error on filepath.Walk : ", err)
    } else {
        fmt.Printf("%d files, size = %d", count, size)
    }

}

Javaな人には、Java 7から導入されたFiles#walkFileTreeをイメージしていただくのがよいかと思います。

15
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
15