GNU/Linux >> Tutoriels Linux >  >> Linux

Renommer des fichiers pour avoir des extensions en minuscules avec "renommer" ?

J'essaie actuellement de renommer un grand nombre de fichiers et j'ai utilisé des méthodes assez maladroites pour le faire, telles que :

rename 's:(.*).MOV:$1.mov:g' *.MOV
rename 's:(.*).JPG:$1.jpg:g' *.JPG

Ce que j'aimerais vraiment faire, c'est pouvoir combiner toutes ces commandes en utilisant le 'y' sed opérateur. Évidemment, en utilisant cet opérateur, vous pouvez transformer des éléments en minuscules. Le problème est que je n'ai besoin de convertir que les extensions. Existe-t-il un moyen de le faire en utilisant cette commande? Je dois essentiellement transformer le groupe de capture dans l'expression suivante en minuscules :^.+.(.+)$ . Y a-t-il un moyen de faire cela? Je suis un peu nouveau dans ce genre de transformations.

Réponse acceptée :

C'est le rename basé sur Perl trouvé sur Debian, Ubuntu et dérivés, à en juger par la syntaxe. Vous ne pouvez pas utiliser le tr car il agit sur toute la chaîne. Mais vous pouvez faire correspondre l'extension et la mettre en minuscule avec L .

rename 's/.[^.]*$/L$&/' *.JPG *.MOV

Ici, ce n'est pas nécessaire, mais si l'expression régulière correspond à plus que la partie que vous souhaitez mettre en minuscules, vous pouvez mettre la partie à faire correspondre dans un groupe :

rename 's/.([^.]*)$/.L$1/' *.JPG *.MOV

Remplacer *.JPG *.MOV par *.* pour agir sur tous les fichiers, quelle que soit leur extension. Dans bash ≥4.3 (et aussi dans bash 4.0–4.2, avec la mise en garde que cela traverse également les liens symboliques vers les répertoires), vous pouvez facilement agir sur les fichiers dans les sous-répertoires et ainsi de suite de manière récursive :

rename 's/.[^.]*$/L$&/' **/*.*

Pour les fans de zsh (le :r et :e les modificateurs isolent l'extension du reste du fichier) :

autoload zmv
zmv '*.(MOV|JPG)' '${f:r}.${(L)f:e}'      # these extensions, current directory
zmv '*.*' '${f:r}.${(L)f:e}'              # all extensions, current directory
zmv '**/*.*' '${f:r}.${(L)f:e}'           # all extensions, recursive directory traversal

Linux
  1. 3 façons de supprimer tous les fichiers d'un répertoire sauf un ou quelques fichiers avec des extensions

  2. Centos - Renommer tous les fichiers avec un certain nom ?

  3. Renommer les fichiers dans le répertoire ?

  4. Renommer de nombreux fichiers sous Linux selon un modèle

  5. Comment renommer en masse des fichiers avec un encodage invalide ou remplacer en masse des caractères encodés invalides ?

Comment renommer des fichiers sous Linux

Comment renommer un ou plusieurs fichiers sous Linux

Renommer des fichiers et des dossiers dans cPanel

Puis-je renommer des fichiers dans un répertoire avec Vim ?

Comment renommer tous les fichiers avec des caractères spéciaux et des espaces dans un répertoire ?

Renommer des fichiers sous Linux avec une regex