Quiero mv
todos 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?
for x in {a..z}
do
echo "$x"
mkdir -p path2/${x}
mv path1/${x}*.ext path2/${x}
done
"$x"
lo general, es suficiente y una mejor manera de destacarlo.Esto debería ayudarte a empezar:
for letter in {a..z} ; do echo $letter done
fuente
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.
fuente
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}*
fuente
Con mayúsculas también
for letter in {{a..z},{A..Z}}; do echo $letter done
fuente
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:
Espero que sea útil para alguien que busque el mismo problema que tuve que resolver y que también termine aquí
fuente