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.
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.
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.
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.
find
find . -name * -type f -exec rename 'y/A-Z/a-z/' '{}' \;
find
-name
mettez votre motif.-maxdepth 0
: Seulement le répertoire actuel.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.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.