Как пройти через определенные папки - PullRequest
0 голосов
/ 17 мая 2018

У меня следующая структура каталогов

Root
   |
   |-- dev 
   |     | 
   |     +- files, subdirectory within dev
   |-- prod
   |     |
   |     +- files, subdirectory within prod 
   |-- .git
   |     |
   |     +- .git directory structure
   |--CODEOWNER (file)
   |--README (file)

Я хочу просмотреть все файлы в dev и prod.

Я попытался сделать следующее

files, err := ioutil.ReadDir("./")
if err != nil {
    log.Fatal(err)
}

for _, val := range files {
    // To handle codeowner and readme
    if !val.isDir(){
       continue
    }

   // To handle .git
   if val.Name() == ".git"{
     continue
   }
    err := filepath.Walk(val, func(path string, f os.FileInfo, err error) error {
     // Traverse dircectory , subdirectories and files
}

Есть лиЕсть ли лучший способ сделать это?Мое единственное требование: «Я хочу пройти каталог верхнего уровня (dev и prod) в корневом каталоге, отличном от каталога, начинающегося с точки (.)

Чтобы быть более понятным:

  • В вывод я хочу
    • Все файлы, каталоги, подкаталоги dev
    • Все файлы, каталоги, подкаталоги prod
  • что я не хочу
    • Любой директор root, кроме dev и prod (например, .git)
    • Любые файлы root (например, codeowner или readme)

1 Ответ

0 голосов
/ 17 мая 2018

Использование filepath.Glob.

Получает все файлы в каталоге foo относительно вашего рабочего каталога:

matches, err := filepath.Glob("./foo/*")
if err != nil {
    panic(err.Error())
}

for _, match := range matches {
    fmt.Printf("Got match: %s\n", match)
}

Детская площадка

В вашем случае вы бы использовали filepath.Glob("./dev/*") и filepath.Glob("./prod/*").Реализация Go не поддерживает «директиву двойной звезды» для рекурсивных глобусов, поэтому вам придется обрабатывать подкаталоги самостоятельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...