Chcę utworzyć katalog w taki sposób, że muszę oznaczyć katalogi od a
do z
. Wewnątrz każdego z tych katalogów, muszę utworzyć podkatalogi tak, że są one oznaczone jako aa
, ab
etc.
Tak więc, na przykład, do katalogu m
, moi podkatalogi będą oznaczone jako ma
, mb
do września mz
.
shell-script
mkdir
Ramesh
źródło
źródło
/usr/share/terminfo
[az] i użyłem tego wyjścia. Linux jest dość rzadki pod tym względem, kiedyś były to wpisy dla wszystkich wielkich i małych znaków plus cyfr.Odpowiedzi:
Próbować:
Bash rozwinie
XXX{a..z}
sięXXXa
,XXXb
i tak dalej. Nie ma potrzeby korzystania z wewnętrznej pętli.Po tym:
źródło
Tak więc w przypadku
bash
rozszerzenia alfabetu działa to:A jeśli po prostu wpiszesz alfabet raz w pierwszym wierszu, ta sama koncepcja powinna być przenośna dla dowolnej powłoki. Istnieją inne sposoby dotarcia do ustawionej linii, jeśli nie chcesz jej wpisywać:
... na przykład działa w ustawieniach ASCII. Możesz więc wykonać
set $(seq -sP32P 97 123|dc)
dowolną inną komendę, która da ci$IFS
oddzielną listę argumentów, których potrzebujesz, ale oznacza to, że prawdopodobnie lepiej po prostu użyć tejbash
rzeczy lub ją wpisać.W każdym razie myślę, że tak właśnie bym to zrobił, choćby dlatego, że wywołuje się
mkdir
tak często, jak to konieczne.Aby pokazać, jak to działa, oto mały wynik debugowania mniejszego zestawu:
Jak widać,
for
jedyne pętle raz na indeks tablicy parametrów pozycyjnych, które tutaj ustawiłem, po prostu przekazującsh
parametry przy wywołaniu, i powyżej za pomocąset ${positionals}
. Aleprintf
otrzymuje tę samą tablicę z listy argumentów dla każdej iteracji i stosuje ciąg formatu do każdego z argumentów, dzięki czemu uzyskuje się pozór rekurencji bez zbędnej rekurencji.A dodanie
done|command
strumienia przesyła strumieniowo wszystkie danefor
wyjściowe pętli przez potok w ten sam sposóbdone >file
, przesyła je strumieniowo do pliku - otwierając i zamykając plik wyjściowy tylko raz dla całejfor...done
konstrukcji.źródło
Od tutaj , skończyło się na tworzeniu skryptu takiego. Jeśli jednak dostanę eleganckie rozwiązanie, zaakceptuję je jako odpowiedź.
źródło
/home/ramesh/"$x"/"$x$y"
,/home/ramesh/"$x/$x$y"
lub"/home/ramesh/$x/$x$y"
- wszystkie są równoważne.W
Perl
:File::Path
od tego czasu jest modułem podstawowymPerl 5.001
.źródło