Notez que vous utilisez le script Perl appelérename distribué par Debian et ses dérivés (Ubuntu, Mint,…). D'autres distributions Linux embarquent une commande complètement différente et considérablement moins utile appelée rename.
y/A-Z/a-z/se traduit chaque caractère dans la plage à Atravers Zdans le caractère correspondant dans la plage à atravers z, soit des lettres majuscules ASCII à la lettre minuscule correspondante. Pour effectuer la traduction opposée, utilisez y/a-z/A-Z/. Une autre façon d'écrire la même commande est rename '$_ = uc($_)' *- ucest la fonction u pper c ase, et la renamecommande renomme les fichiers en fonction de la transformation effectuée dans la $_variable.
rename '…' *ne renomme que les fichiers du répertoire courant, car c'est ce qui *correspond. Les fichiers de points (les fichiers dont le nom commence par .) sont également ignorés.
Si vous souhaitez renommer les fichiers du répertoire en cours et des sous-répertoires de manière récursive, vous pouvez utiliser la findcommande pour parcourir le répertoire en cours de manière récursive. Il y a une difficulté ici: si vous appelez rename, cela renomme à la fois le répertoire et la partie nom de base. Si vous appelez renameun répertoire avant de rentrer dans it ( find -exec rename … {} \;), cela finddevient confus car il a trouvé un répertoire mais ce répertoire n'existe plus au moment où il essaie d'y descendre. Vous pouvez contourner ce en disant findà traverser un répertoire avant d' agir là - dessus, mais vous finissez par tenter de renommer foo/barpour , FOO/BARmais le répertoire FOOn'existe pas.
Un moyen simple d'éviter cette difficulté est de faire en sorte que la commande de changement de nom n'agisse que sur la partie du nom de base du chemin. L'expression régulière ([^/]*\Z)correspond à la dernière partie du chemin d'accès qui ne contient pas de /.
find . -depth -exec rename 's!([^/]*\Z)!uc($1)!e' {} +
Le shell zsh offre des fonctionnalités plus pratiques pour renommer - encore plus cryptique que Perl, mais plus tordu et souvent plus facile à composer.
La fonction zmvrenomme les fichiers en fonction des modèles. Exécutez autoload -U zmvune fois pour l'activer (mettez cette ligne dans votre .zshrc).
Dans le premier argument de zmv(le modèle à remplacer), vous pouvez utiliser les puissants modèles génériques de zsh . Dans le deuxième argument de zmv(le texte de remplacement), vous pouvez utiliser ses fonctions d' extension de paramètres , y compris les modificateurs d'historique .
zmv -w '**/*' '$1$2:u'
Explication:
-w - attribuer automatiquement des variables numériques à chaque motif générique
**/*- tous les fichiers dans les sous-répertoires, récursivement ( **/correspond à 0, 1 ou plusieurs niveaux de sous-répertoires)
$1 - la première variable numérique, correspondant ici à la partie répertoire de chaque chemin
$2:u- la deuxième variable numérique, correspondant ici à la partie du nom de base de chaque chemin, avec le :umodificateur pour convertir la valeur en majuscule
En prime, cela respecte les paramètres de l'environnement local.
Si vous n'êtes pas sûr d'une zmvcommande que vous avez écrite, vous pouvez passer l' -noption pour imprimer ce que la commande ferait et ne rien changer. Vérifiez la sortie et, si elle fait ce que vous voulez, réexécutez la commande sans -nréellement agir.
rename 'y/a-z/A-Z/' *vous obtiendrez ce que vous voulez. Faites attention où vous le testez.