web-dev-qa-db-fra.com

En boucle dans les alphabets en bash

Je veux mv tous les fichiers commençant par 'x' dans le répertoire 'x'; quelque chose comme:

mv path1/x*.ext path2/x

et le faire pour toutes les lettres de l'alphabet a, ..., z

Comment puis-je écrire un script bash qui fait "x" en boucle à travers l'alphabet?

74
behzad.nouri
for x in {a..z}
do
    echo "$x"
    mkdir -p path2/${x}
    mv path1/${x}*.ext path2/${x}
done
121
Kamil Dziedzic

Cela devrait vous aider à démarrer:

for letter in {a..z} ; do
  echo $letter
done
35
Mat

voici comment générer l'alphabet espagnol en utilisant une extension imbriquée

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

Ou simplement

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

Si vous souhaitez générer l’alphabet espagnol obsolète 29 caractères

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

De même pourrait être fait pour l'alphabet français ou l'alphabet allemand.

17
Luis Muñoz

Utiliser rename :

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

Si vous voulez supprimer le caractère [a-z] de nom de fichier, le perlexpr mis à jour serait:

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

En majuscule aussi

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