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

Unamata Sanatarai
la source

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 .

Stef K
la source
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.

arielf
la source
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.
Pablo Bianchi
la source