Renommer des fichiers par lots en minuscules


17

Existe-t-il un moyen de renommer tous les fichiers d'un répertoire en minuscules | majuscules?

Je recherche une commande oneliner .

J'ai adoré TotalCommander alt+f7, maintenant j'ai besoin de cette fonctionnalité dans le terminal

Réponses:


20

Pour chaque fichier a_filedu répertoire actuel, renommez-le a_fileen minuscules.

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

Pour les majuscules, inversez les arguments pour [:lower:] [:upper:]

trlien de référence de commande

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, lspeuvent être utilisés:

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

Le code ci-dessus affectera à la a_filevariable tous les fichiers avec l'extension .jpg.

Mettre à jour l'-v option ajoutée à la mvcommande selon les suggestions de sds .


4
vous voudrez peut-être passer "-v" pour mvvoir ce qui se fait; vous ne voudrez peut- être pas passer "-f" car cela pourrait encombrer les fichiers existants
sds

Cela ne fonctionne pas pour les fichiers avec des espaces dans leur nom.
Tianxiang Xiong

Vous pouvez utiliser des guillemets autour du nom de fichier.
Stef K

2
Désolé, mais la partie sur ls * jpg est une mauvaise idée. mywiki.wooledge.org/ParsingLs Vous pouvez obtenir le même résultat avec * jpg le long où vous aviez * en premier lieu.
tink

16

Il existe un utilitaire plus élégant et général appelé prename.

Écrit par Larry Wall, il est livré avec perldonc il est très probablement déjà disponible sur votre système /usr/bin/prename(si vous avez des alternatives de configuration, il peut également être disponible sous /usr/bin/renameforme de lien symbolique 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 char 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, dans le cas de renommer un fichier en un nom de fichier existant.

man prename pour plus de détails.


1

En utilisant find

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

Pour find

  • Bien sûr, après avoir -namemis votre modèle.
  • -maxdepth 0: Uniquement le répertoire courant.

Pour rename

  • -n, -nono: Aucune action: affichez les noms des fichiers à renommer, mais ne les renommez pas.
  • y/source/dest/: Translittérer les caractères de l'espace de motif qui apparaissent en source au caractère correspondant dans dest.
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.