Автоматизированный способ создать дерево каталогов

Я пытаюсь сделать дерево каталогов от А до Я, где следующий каталог в текущем каталоге.

Например: B в A, и C в B и так далее..

-A
--B
---C
----...Z

Какие-либо подсказки о том, как получить сделанный автоматизированный путь?

11
задан 10 April 2018 в 05:51

3 ответа

С 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 каталог с любыми родительскими каталогами, для которых было нужно создание.
25
ответ дан 23 November 2019 в 03:51

На очень простом уровне Вы могли использовать {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
7
ответ дан 23 November 2019 в 03:51

Даже при том, что 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 попросился создать, не проблема и возможно стилистически предпочтительна. Но хорошо опускать его, как другие примеры в этом ответе делают.

2
ответ дан 23 November 2019 в 03:51

Другие вопросы по тегам:

Похожие вопросы: