19 votes

Renommer en lot des fichiers en minuscules

Y a-t-il un moyen de renommer tous les fichiers dans un répertoire en minuscules|majuscules ?

Je cherche une commande en une seule ligne.

J'adorais Alt + F7 de TotalCommander, maintenant j'ai besoin de cette fonctionnalité dans le Terminal.

20voto

Fil Points 1651

Pour chaque fichier a_file dans le répertoire actuel, renommer a_file en minuscules.

for a_file in *;do mv -v "$a_file" `echo "$a_file" | tr [:upper:] [:lower:]` ;done;

Pour passer en majuscules, inverser les arguments en [:lower:] [:upper:]

Référence de la commande tr lien

Mise à jour

Pour encore plus de contrôle, * peut être remplacé par ls.

Par exemple, dans un répertoire contenant 1.txt, 2.txt, 3.txt, 1.jpg, 2.jpg et 3.jpg, afin de filtrer uniquement les fichiers *.jpg, ls peut être utilisé:

for a_file in $(ls *.jpg);do mv -v $a_file `echo $a_file | tr [:upper:] [:lower:]` ;done;

Le code ci-dessus assignera à la variable a_file tous les fichiers avec l'extension .jpg.

Mise à jour a ajouté l'option -v à la commande mv comme suggéré par sds.

17voto

arielf Points 2623

Il existe une utilité plus élégante et générale appelée prename.

Écrit par Larry Wall, il est livré avec perl donc il est très probablement déjà disponible sur votre système en tant que /usr/bin/prename (si vous avez configuré des alternatives, il peut également être disponible en tant que lien symbolique /usr/bin/rename via /etc/alternatives vers prename)

En l'utilisant, vous pouvez renommer plusieurs fichiers en une seule commande en fournissant n'importe quelle expression perl (y compris mais sans s'y limiter la substitution s/// ou la translittération de caractères tr///):

Exemples:

# Mettre tous les noms de fichiers *.JPG en minuscules :
prename tr/A-Z/a-z/ *.JPG

# Changer tout 'No' dans un nom de fichier par 'Yes':
prename s/No/Yes/g *No*

# incrémenter la première séquence de chiffres dans un nom de fichier de 3 :
prename 's/([0-9]+)/$1+3/e' *[0-9]*

# Si un fichier contient 'aaa', ajouter '.bak' à son nom
prename 'if (/aaa/) {$_ .= ".bak"}'  *

Et ainsi de suite.

Une autre chose agréable à propos de prename est qu'il vous protège en cas de renommage d'un fichier vers un nom de fichier existant.

man prename pour plus de détails.

1voto

Pablo Bianchi Points 10158

Utilisation de find

find . -name * -type f -exec rename 'y/A-Z/a-z/' '{}' \;

Pour find

  • Bien sûr, après -name mettez votre motif.
  • -maxdepth 0 : Seulement le répertoire actuel.

Pour rename

  • -n, -nono : Pas d'action : affiche les noms des fichiers à renommer, mais ne les renomme pas.
  • y/source/dest/ : Translitère les caractères dans l'espace du motif qui apparaissent dans source en le caractère correspondant dans dest.

0voto

bac0n Points 4841

Utilisation de mmv pour convertir la chaîne correspondante en majuscules :

$ mmv -r '*' '#u1'

Il est important de mettre des guillemets autour du motif sinon il va étendre le joker à la place.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X