#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 спасибо, добавил его в мой пример. Пожалуйста, примите ответ, если он отвечает на ваш вопрос 🙂