web-dev-qa-db-fra.com

Lot renommer les fichiers en minuscule

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

17
Unamata Sanatarai

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.

20
Stef K

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.

16
arielf

Utiliser find

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

Pour find

  • Bien sûr après -name mettez votre modèle.
  • -maxdepth 0: Seul le répertoire en cours.

Pour 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.
1
Pablo Bianchi