Recorrer alfabetos en Bash

82

Quiero mvtodos los archivos que comienzan con 'x' al directorio 'x'; algo como:

mv path1/x*.ext path2/x

y hazlo para todas las letras del alfabeto a, ..., z

¿Cómo puedo escribir un script bash que haga bucles 'x' a través del alfabeto?

behzad.nouri
fuente

Respuestas:

139
for x in {a..z}
do
    echo "$x"
    mkdir -p path2/${x}
    mv path1/${x}*.ext path2/${x}
done
Kamil Dziedzic
fuente
1
¿Puedo preguntar por qué incluye x con llaves en la cuarta y quinta línea?
Jiaqi Li
No es necesario aquí, pero bueno, funciona y hace que los parámetros se destaquen mejor;) gnu.org/software/bash/manual/…
Kamil Dziedzic
1
Por "$x"lo general, es suficiente y una mejor manera de destacarlo.
Weijun Zhou
39

Esto debería ayudarte a empezar:

for letter in {a..z} ; do
  echo $letter
done
Estera
fuente
20

aquí se explica cómo generar el alfabeto español mediante la expansión de llaves anidadas

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

O simplemente

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

Si desea generar el obsoleto alfabeto español de 29 caracteres

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

Se podría hacer algo similar para el alfabeto francés o el alfabeto alemán.

Luis Muñoz
fuente
3

Usando rename:

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

Si desea quitar el carácter inicial [az] del nombre de archivo, el perlexpr actualizado sería:

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

Con mayúsculas también

for letter in {{a..z},{A..Z}}; do
  echo $letter
done
Thanh Trung
fuente
1

Esta pregunta y las respuestas me ayudaron con mi problema, en parte.
Necesitaba lucir una parte del alfabeto en bash.

Aunque la expansión es estrictamente textual

Encontré una solución: y la hice aún más simple:

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

Lo que resulta en:

A
B
C
D

Espero que sea útil para alguien que busque el mismo problema que tuve que resolver y que también termine aquí

Alfons
fuente