Zapętlanie alfabetów w Bash

84

Chcę, aby mvwszystkie pliki zaczynające się od „x” przechodziły do ​​katalogu „x”; coś jak:

mv path1/x*.ext path2/x

i zrób to dla wszystkich liter alfabetu a, ..., z

Jak napisać skrypt basha, który tworzy pętle „x” po alfabecie?

behzad.nouri
źródło

Odpowiedzi:

140
for x in {a..z}
do
    echo "$x"
    mkdir -p path2/${x}
    mv path1/${x}*.ext path2/${x}
done
Kamil Dziedzic
źródło
1
Czy mogę zapytać, dlaczego umieszczasz x w nawiasach klamrowych w czwartej i piątej linii?
Jiaqi Li
Nie jest to wymagane, ale cóż, działa i sprawia, że ​​parametry się wyróżniają;) gnu.org/software/bash/manual/...
Kamil Dziedzic
1
Zwykle "$x"wystarczy i lepszy sposób, aby się wyróżnić.
Weijun Zhou
39

To powinno zacząć:

for letter in {a..z} ; do
  echo $letter
done
Mata
źródło
21

Oto jak wygenerować alfabet hiszpański za pomocą zagnieżdżonego rozwinięcia nawiasów

for l in {{a..n},ñ,{o..z}}; do echo $l ; done | nl
1  a
 ...
14  n
15  ñ
16  o
...
27  z

Lub po prostu

echo -e {{a..n},ñ,{o..z}}"\n" | nl

Jeśli chcesz wygenerować przestarzałe 29 znaków hiszpańskiego alfabetu

echo -e {{a..c},ch,{d..l},ll,{m,n},ñ,{o..z}}"\n" | nl

Podobnie można by zrobić z alfabetem francuskim lub alfabetem niemieckim.

Luis Muñoz
źródło
3

Używając rename:

mkdir -p path2/{a..z}
rename 's|path1/([a-z])(.*)|path2/$1/$1$2' path1/{a..z}*

Jeśli chcesz usunąć początkowy znak [az] z nazwy pliku, zaktualizowany perlexpr będzie wyglądał następująco:

rename 's|path1/([a-z])(.*)|path2/$1/$2' path1/{a..z}*
anishsane
źródło
2

Wielkimi literami też

for letter in {{a..z},{A..Z}}; do
  echo $letter
done
Thanh Trung
źródło
1

To pytanie i odpowiedzi częściowo pomogły mi w rozwiązaniu mojego problemu.
Musiałem przełożyć lupę na część alfabetu w bash.

Chociaż rozszerzenie jest ściśle tekstowe

Znalazłem rozwiązanie: i uprościłem je jeszcze bardziej:

START=A
STOP=D
for letter in $(eval echo {$START..$STOP}); do
    echo $letter
done

Co skutkuje w:

A
B
C
D

Mam nadzieję, że jest to pomocne dla kogoś, kto szuka tego samego problemu, który musiałem rozwiązać, i kończy się tutaj

Alphons
źródło