понедельник, 20 апреля 2020 г.

Получить список всех файлов (рекурсивно) в каталоге в Golang

Список каталогов

Используйте функцию ioutil.ReadDir в пакете io/ioutil. Возвращает отсортированный срез, содержащий элементы типа os.FileInfo.

Код в следующем примере печатает отсортированный список всех имен файлов в текущем каталоге.

files, err := ioutil.ReadDir(".")
if err != nil {
    log.Fatal(err)
}
for _, f := range files {
    fmt.Println(f.Name())
}

Пример вывода:

dev
etc
tmp
usr

Посетить все файлы и папки в дереве каталогов

Используйте функцию filepath.Walk в пакете path/filepath.

  • Она просматривает файловое дерево, вызывая функцию типа filepath.WalkFunc для каждого файла или каталога в дереве, включая корень.
  • Файлы идут в лексическом порядке.
  • Не следует по символическим ссылкам.

Код в следующем примере перечисляет пути и размеры всех файлов и каталогов в дереве файлов с корнем в текущем каталоге.

err := filepath.Walk(".",
    func(path string, info os.FileInfo, err error) error {
    if err != nil {
        return err
    }
    fmt.Println(path, info.Size())
    return nil
})
if err != nil {
    log.Println(err)
}

Пример вывода:

. 1644
dev 1644
dev/null 0
dev/random 0
dev/urandom 0
dev/zero 0
etc 1644
etc/group 116
etc/hosts 20
etc/passwd 0
etc/resolv.conf 0
tmp 548
usr 822
usr/local 822
usr/local/go 822
usr/local/go/lib 822
usr/local/go/lib/time 822
usr/local/go/lib/time/zoneinfo.zip 366776


Читайте также:


Комментариев нет:

Отправить комментарий