Как создать дерево каталогов с синтаксисом расширения в скобках bash

#go #filesystems

# #Вперед #файловые системы

Вопрос:

Хотя os.MkdirAll поведение похоже на mkdir -p создание родительских элементов, если это необходимо, то как бы вы взяли входную строку, например data/{P1/{10..19},P2/{20..29},P3/{30..39}} , и создали дерево каталогов?

Ответ №1:

Эта строка data/{P1/{10..19},P2/{20..29},P3/{30..39}} является расширением фигурных скобок bash.

Есть несколько библиотек, которые реализовали это:

Вы также можете использовать путь к файлу.Найдите что-то похожее на синтаксис подстановочных знаков bash: https://golang.org/pkg/path/filepath/#Glob

В качестве альтернативы вы могли бы раскошелиться на bash:

 cmd := exec.Command("bash", "-c", "echo data/{P1/{10..19},P2/{20..29},P3/{30..39}}")
respBytes, err := cmd.CombinedOutput()
if err != nil {
    panic(err)
}

for _, path := range strings.Fields(string(respBytes)) {
    os.MkdirAll(path, 0700)
}
 

Стоит отметить, что если в именах папок / файлов есть пробелы, эта стратегия не будет работать.

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

1. Из вашего ответа тогда: ` для _, path := строки диапазона. Поля (строка (респБайты)) {os.MkdirAll(путь, 0700)}`

2. @mkungla спасибо, добавил его в мой пример. Пожалуйста, примите ответ, если он отвечает на ваш вопрос 🙂