Я пытаюсь сделать дерево каталогов от А до Я, где следующий каталог в текущем каталоге.
Например: B в A, и C в B и так далее..
-A
--B
---C
----...Z
Какие-либо подсказки о том, как получить сделанный автоматизированный путь?
С mkdir
, printf
и расширение фигурной скобки удара:
$ mkdir -p "$(printf "%s/" {A..Z})"
$ tree A
A
└── B
└── C
└── D
└── E
└── F
└── G
└── H
└── I
└── J
└── K
└── L
└── M
└── N
└── O
└── P
└── Q
└── R
└── S
└── T
└── U
└── V
└── W
└── X
└── Y
└── Z
25 directories, 0 files
{A..Z}
расширяется до A B ... Z
, printf "%s/"
печатает споры с a /
после них, таким образом, я добираюсь A/B/...Z/
mkdir -p
создает A/B/.../Z
каталог с любыми родительскими каталогами, для которых было нужно создание.На очень простом уровне Вы могли использовать {A..Z}
расширение для генерации всей буквы затем многократно сделайте и введите каждого:
~/test_directory$ for d in {A..Z}; do mkdir "$d"; cd "$d"; done
~/test_directory/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z$
Как Вы видите в моем быстром выводе, теперь Вы полностью объединили каталог в цепочку.
Однако, если фактические имена каталогов отличаются, чем просто алфавит, необходимо будет так или иначе предоставить список имен каталогов, возможно, через файл, по которому Вы выполняете итерации и делаете тот же процесс снова. В основном, это
while IFS= read -r dir_name;do mkdir "$dir_name"; cd "$dir_name" ;done < directory_list.txt
Даже при том, что muru's printf
путь не может быть разбит, мне лично нравится jot
для этого вида вещи. jot
не установлен по умолчанию в Ubuntu. athena-jot
пакет обеспечивает его. Любая из этих работ команд:
mkdir -p "$(jot -s/ -c 26 A)"
jot -s/ -c 26 A | xargs mkdir -p
Действительно любая команда, которая генерирует последовательность букв и присоединяется к ним с наклонными чертами, упростит это, потому что ее вывод может затем быть передан mkdir -p
любой через замену команды (как в ответе muru) или использование xargs
. Вот некоторые примеры с помощью нескольких инструментов и xargs
это не требует, чтобы Вы установили программное обеспечение, кроме, возможно, в очень минимальных системах или Ядре Ubuntu:
perl -we 'print join "/", A..Z' | xargs mkdir -p
ruby -we 'print (?A..?Z).to_a * ?/' | xargs mkdir -p
python3 -c 'print("/".join(__import__("string").ascii_uppercase))' | xargs mkdir -p
Старые релизы Ubuntu идут с Python 2 вместо Python 3. Для этого просто изменитесь python3
кому: python
заставить ту последнюю команду работать, если Вы действительно хотите сделать это с Python.
Точно так же короткий и простой путь muru может альтернативно быть записан:
printf '%s/' {A..Z} | xargs mkdir -p
Запаздывание /
, в пути к каталогу mkdir -p
попросился создать, не проблема и возможно стилистически предпочтительна. Но хорошо опускать его, как другие примеры в этом ответе делают.