Existe-t-il un moyen de renommer tous les fichiers dans un répertoire en minuscule | majuscule?
Je cherche une commande oneliner.
J'ai adoré alt+f7
de TotalCommander, maintenant j'ai besoin de cette fonctionnalité dans le terminal
Pour chaque fichier a_file
du répertoire en cours, renommez a_file
en minuscule.
for a_file in *;do mv -v "$a_file" `echo "$a_file" | tr [:upper:] [:lower:]` ;done;
Pour les majuscules, inversez les arguments en [:lower:] [:upper:]
tr
référence de commande lien
Mettre à 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 ne filtrer que 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 ajouté l’option -v
à la commande mv
selon sds suggérée.
Il existe un utilitaire plus élégant et général appelé prename
.
Écrit par Larry Wall, il est livré avec Perl
. Il est donc probablement déjà disponible sur votre système en tant que /usr/bin/prename
(si vous avez d'autres options de configuration, il peut également être disponible en tant que /usr/bin/rename
symlinked via/etc/alternatives à prename
)
En l'utilisant, vous pouvez renommer plusieurs fichiers en une seule commande en fournissant toute expression Perl (y compris, sans toutefois s'y limiter, substitution s///
ou translittération de caractères tr///
):
Exemples:
# Lowercase all *.JPG filenames:
prename tr/A-Z/a-z/ *.JPG
# Change any 'No' in a filename to a 'Yes':
prename s/No/Yes/g *No*
# increment first sequence of digits in a filename by 3:
prename 's/([0-9]+)/$1+3/e' *[0-9]*
# If a file contains 'aaa', append '.bak' to its name
prename 'if (/aaa/) {$_ .= ".bak"}' *
Etc.
Une autre bonne chose à propos de prename est qu’il vous protège en cas de changement de nom d’un fichier en 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 modèle.-maxdepth 0
: Seul le répertoire en cours.rename
-n, -nono
: Aucune action: imprimer les noms des fichiers à renommer, mais ne pas renommer.y/source/dest/
: Convertissez les caractères de l'espace de modèle qui apparaissent dans la source en caractères correspondants dans dest.