Próbuję utworzyć drzewo katalogów od A do Z, w którym następny katalog znajduje się w bieżącym katalogu.
Na przykład: B znajduje się w przedziale A, a C w przedziale B itd.
-A
--B
---C
----...Z
Wszelkie wskazówki, jak to zrobić w sposób zautomatyzowany?
command-line
directory
Nish
źródło
źródło
mkdir -p
”.)Odpowiedzi:
Z
mkdir
,printf
i ekspansja klamra Bash za:{A..Z}
rozszerza sięA B ... Z
,printf "%s/"
wypisuje argumenty/
po nich, więc rozumiemA/B/...Z/
mkdir -p
tworzyA/B/.../Z
katalog z dowolnymi katalogami nadrzędnymi, które wymagały utworzenia.źródło
-p
wmkdir
poleceniu.Na bardzo prostym poziomie można użyć
{A..Z}
rozszerzenia do wygenerowania całej litery, a następnie iteracyjnie utworzyć i wprowadzić każdą z nich:Jak widać w moim wierszu polecenia, masz już całkowicie łańcuchowy katalog.
Jeśli jednak rzeczywiste nazwy katalogów są inne niż tylko alfabet, musisz w jakiś sposób podać listę nazw katalogów, być może za pośrednictwem pliku, nad którym iterujesz i ponownie wykonujesz ten sam proces. Zasadniczo to
źródło
for d in {A..Z}; do mkdir "$d"; cd "$d"; for i in {1..100}; do mkdir "${d}${i}" ;done ; done
for d in {A..Z}; do mkdir "$d"; cd "$d"; mkdir "$d"{1..100}; done
tree
nie jestem pewien, jak to naprawić, ale myślę, że może to nawet nie stanowićtree
problemu, ale raczej porządek sortowania powłoki. Proponuję zadać aktualne pytanie na ten temat albo tutaj, albo jeszcze lepiej na unix.stackexchange.comMimo, że sposób Muru
printf
nie może zostać pokonany, osobiście lubięjot
takie rzeczy.jot
nie jest domyślnie instalowany w Ubuntu.athena-jot
Pakiet zawiera go. Każde z tych poleceń działa:Ułatwi to naprawdę każde polecenie, które generuje sekwencję liter i łączy je ukośnikami, ponieważ ich dane wyjściowe można następnie przekazać
mkdir -p
albo przez zastąpienie polecenia (jak w odpowiedzi muru ), albo za pomocąxargs
. Oto kilka przykładów z użyciem kilku narzędzixargs
, które nie wymagają instalacji oprogramowania, z wyjątkiem być może na bardzo minimalnych systemach lub Ubuntu Core:Stare wersje Ubuntu pochodzi z Python 2 zamiast Python 3. W tym celu wystarczy zmienić
python3
siępython
, aby to ostatnie dzieło polecenia, jeśli naprawdę chcesz to zrobić z poziomu Pythona.Podobnie, krótki i prosty sposób muru można alternatywnie napisać:
Końcowe
/
, w ścieżce katalogu, o którąmkdir -p
prosi się o utworzenie, nie stanowi problemu i jest prawdopodobnie preferowane stylistycznie. Ale można to pominąć, podobnie jak inne przykłady w tej odpowiedzi.źródło