управление строкой для создания каталогов в unix


Я хочу взять слово в качестве входных данных и создать последовательные каталоги, используя буквы этого слова в оболочке unix. Я попробовал команды sed, awk и fold, но не получил никакого полезного результата. Какой-нибудь совет?

Например: если input равен hello, он должен создавать каталоги h/e/l/l/o как один внутри другого. Другими словами, h будет верхним каталогом, а o - самым глубоким подкаталогом.

2 2

2 ответа:

Это должно сделать трюк в любой совместимой с Борном оболочке:

$ mkdir -p $(echo foobar | sed 's:\(.\):\1/:g')
$ find f
f
f/o
f/o/o
f/o/o/b
f/o/o/b/a
f/o/o/b/a/r
Обратите внимание, что \1 является обратным отношением к тексту, сопоставленному первой паре \(...\). Заметьте также, что результатом расширения является mkdir -p f/o/o/b/a/r/ - но mkdir игнорирует косую черту в нашу пользу.
mkdir -p $(echo $1 | sed 's/[0-9a-zA-Z]/\0\//g')

EDIT: я полагаю, что некоторые объяснения в порядке:

  1. mkdir -p чтобы создать дерево каталогов
  2. каталог, о котором идет речь, создается из входных данных с преобразованием
  3. Преобразование состоит в том, что любая буква или число превращаются в себя, а за ними следует символ /