Я знаю, что могу создать серию вложенных каталогов через довольно многословную серию mkdir -p
с флагом -p
, применяемым для подавления предупреждений о том, что каталог уже существует. Это становится очень многословным с отдельными вызовами, то есть:Создание иерархического дерева каталогов из представления компактных строк
mkdir -p hello
mkdir -p hello/i_am_a
mkdir -p hello/i_am_a/boy
mkdir -p hello/i_am_a/girl
mkdir -p hello/i_am_a/alien
mkdir -p hello/i_am_a/dog
mkdir -p hello/my_name_is
mkdir -p hello/my_name_is/jim
mkdir -p hello/my_name_is/bob
mkdir -p hello/my_name_is/secret
Я хотел бы, чтобы вместо того, чтобы построить дерево или, по крайней мере, часть в одном вызове с вложенной шаблон, состоящей из списка с раскрытием характера (т.е. {
) , символ разделителя списка (то есть ,
). и символ закрытия списка (т.е. }
).
Для каждого уровня, начинающегося с вершины, каталог этого имени создается, если он еще не существует.
Чтобы продолжить свой глупый выше пример с реальными словами, я хотел бы использовать строку ввода:
«привет {i_am_a {мальчика, девочка, чужая, собака}, my_name_is {джим, боб, секрет}} '
... который должен создать следующие ...
hello
hello/i_am_a
hello/i_am_a/boy
hello/i_am_a/girl
hello/i_am_a/alien
hello/i_am_a/dog
hello/my_name_is
hello/my_name_is/jim
hello/my_name_is/bob
hello/my_name_is/secret
Для удобства, скажем, что если длина это влияет раствора, мы можем предположить, что нет более n
слои гнездования в полученном дереве (например, n=3
в моем примере выше, например).
Предположим далее, для удобства, что три специальные структуры символов (в приведенном выше примере, например {
, ,
и }
) никогда не будет происходить во вложенных строк, то есть они никогда не будут отображаться в результате пути к файлам ,
Кажется, Perl
или Python
встроенный скрипт может сделать трюк, но, возможно, есть более простое решение с использованием встроенной функции BASH
?
Моя цель - краткое решение, которое ограничивает многословие моих сценариев пост-обработки данных, которые часто связаны с созданием иерархических деревьев каталогов, заполненных на более глубоких уровнях промежуточными звеньями, которые я сохраняю для повторного использования и с законченными результатами в каталоги к вершине дерева.
Вы были здесь достаточно долго, чтобы знать, что этот тип запроса «напишите мой код для меня» полностью не соответствует теме StackOverflow. Проверьте [ask] и посетите [help]. –
Существует ряд высокоценных вопросов, требующих очень специфических однострочных. В этом случае я просто спрашиваю, как реализовать небольшое очень конкретное действие с неоднозначным методом. Это ничем не отличается от запроса «как мне заставить это регулярное выражение работать». Я не думаю, что вымогательство лаконичных/хорошо сделанных однострочных составляющих «напишите мой код», если сделать экономно ... –
Посмотрите на решение Ф. Хаури! При всей вашей снисходительности был простой ответ, чтобы выполнить это! Кстати, это был похожий, но немного другой вопрос, и сообщество явно признало его приемлемым: http://stackoverflow.com/questions/2445213/building-a-directory-tree-from-a-list-of-file-paths Just потому что у ВАС нет конкретного решения для конкретного запроса, это не значит, что вы должны атаковать тех, кто публикует его, если цель ограничена и четко определена. Опять же, если бы мы применили ваш стандарт, возможно, 50% вопросов, связанных с сценарием, оцененных 2 или выше, исчезли бы ... –