Comment utiliser la commande renommer sous Linux

Familiarisez-vous avec la centrale de renommée de fichiers du monde Linux et donnez du repos à mv et à vous-même. Renommer est flexible, rapide et parfois même plus facile. Voici un tutoriel sur cette centrale d’une commande.

Quel est le problème avec mv?

Il n’y a rien de mal avec mv. La commande fait un beau travail, et il se trouve sur toutes les distributions Linux, sous macOS et dans d’autres systèmes d’exploitation de type Unix. Donc c’est toujours disponible. Mais parfois, vous avez juste besoin d’un bulldozer, pas d’une pelle.

La commande mv a un but dans la vie, et c’est de déplacer des fichiers. C’est un effet secondaire heureux qu’il peut être utilisé pour déplacer un fichier existant dans un nouveau fichier, avec un nouveau nom. L’effet net est de renommer le fichier, donc nous obtenons ce que nous voulons. Mais mv n’est pas un outil de renommage de fichiers dédié.

Renommer un seul fichier avec mv

Pour utiliser mv pour renommer un fichier, tapez mv, un espace, le nom du fichier, un espace et le nouveau nom que vous souhaitez que le fichier ait. Appuyez ensuite sur Entrée.

Vous pouvez utiliser ls pour vérifier que le fichier a été renommé.

mv oldfile.txt newfile.txt
ls *.txt

mv oldfile.txt newfile.txt dans une fenêtre de terminal

Renommer plusieurs fichiers avec mv

Les choses se compliquent lorsque vous souhaitez renommer plusieurs fichiers. mv n’a pas la capacité de renommer plusieurs fichiers. Vous devez recourir à quelques astuces astucieuses de Bash. C’est bien si vous connaissez une fu de ligne de commande de qualité moyenne, mais la complexité de renommer plusieurs fichiers avec mv contraste fortement avec la facilité d’utilisation de mv pour renommer un seul fichier.

Les choses dégénèrent rapidement.

Disons que nous avons un répertoire avec une variété de fichiers, de types différents. Certains de ces fichiers ont une extension «.prog». Nous voulons les renommer sur la ligne de commande afin qu’ils aient une extension «.prg».

Comment faire pour que mv fasse cela pour nous? Jetons un coup d’œil aux fichiers.

ls *.prog -l

ls * .prog -l dans une fenêtre de terminal

Voici une façon de le faire qui ne recourt pas à l’écriture d’un fichier de script Bash réel.

for f in *.prog; do mv -- "$f" "${f%.prog}.prg"

pour f dans * .prog; faire mv -

Est-ce que ça a fonctionné? Vérifions les fichiers et voyons.

ls *.pr*

ls * .pr * dans une fenêtre de terminal

Alors, oui, cela a fonctionné. Ce sont tous des fichiers «.prg» maintenant, et il n’y a pas de fichiers «.prog» dans le répertoire.

  Comment mettre en miroir / retourner des photos sous Windows 10

Qu’est-ce qui vient juste de se passer?

Qu’est-ce que ce long commandement a réellement fait? Décomposons-le.

for f in *.prog; do mv -- "$f" "${f%.prog}.prg"

La première partie lance une boucle qui va traiter chaque fichier «.prog» du répertoire, à son tour.

La partie suivante explique ce que fera le traitement. Il utilise mv pour déplacer chaque fichier vers un nouveau fichier. Le nouveau fichier va être nommé avec le nom du fichier d’origine à l’exclusion de la partie «.prog». Une nouvelle extension de «.prg» sera utilisée à la place.

Il doit y avoir un moyen plus simple

Très certainement. C’est la commande renommer.

rename ne fait pas partie d’une distribution Linux standard, vous devrez donc l’installer. Il a également un nom différent dans différentes familles de Linux, mais ils fonctionnent tous de la même manière. Vous devrez simplement remplacer le nom de commande approprié en fonction de la saveur Linux que vous utilisez.

dans les distributions dérivées d’Ubuntu et de Debian, vous installez renommer comme ceci:

sudo apt-get install rename

sudo apt-get install renommer dans une fenêtre de terminal

Dans les distributions dérivées de Fedora et RedHat, vous installez un prename comme celui-ci. Notez le «p» initial, qui signifie Perl.

sudo dnf install prename

sudo dnf install prename dans une fenêtre de terminal

Pour l’installer dans Manjaro Linux, utilisez la commande suivante. Notez que la commande de changement de nom s’appelle perl-rename.

sudo pacman -Syu perl-rename

sudo pacman -Syu perl-rename dans une fenêtre de terminal

Faisons ça à nouveau

Et cette fois, nous utiliserons renommer. Nous allons reculer l’horloge pour avoir un ensemble de fichiers «.prog».

ls *.prog

ls * .prog dans une fenêtre de terminal

Utilisons maintenant la commande suivante pour les renommer. Nous vérifierons ensuite avec ls si cela a fonctionné. N’oubliez pas de remplacer renommer par le nom de commande approprié pour votre Linux si vous n’utilisez pas Ubuntu ou un Linux dérivé de Debian.

rename 's/.prog/.prg/' *.prog
ls *.pr*

renommer 's / .prog / .prg /' * .prog dans une fenêtre de terminal

Cela a fonctionné, ce sont maintenant tous des fichiers «.prg», et il n’y a plus de fichiers «.prog» dans le répertoire.

Que s’est-il passé ce temps?

Expliquons ce peu de magie, en trois parties.

La première partie est le nom de la commande, rename (ou prename ou perl-rename, pour les autres distributions).

La dernière partie est * .prog, qui indique à renommer d’agir sur tous les fichiers «.prog».

La partie centrale définit le travail que nous voulons faire sur chaque nom de fichier. Le s signifie substitut. Le premier terme (.prog) est ce que rename recherchera dans chaque nom de fichier et le second terme (.prg) est ce par quoi il sera remplacé.

La partie centrale de la commande, ou expression centrale, est un Perl ‘expression régulière‘et c’est ce qui donne à la commande de changement de nom sa flexibilité.

Modification d’autres parties d’un nom de fichier

Nous avons changé les extensions de noms de fichiers jusqu’à présent, modifions d’autres parties des noms de fichiers.

Dans le répertoire se trouvent de nombreux fichiers de code source C. Tous les noms de fichiers sont préfixés par «slang_». Nous pouvons vérifier cela avec ls.

ls sl*.c

ls sl * .c dans une fenêtre de terminal

Nous allons remplacer toutes les occurrences de «slang_» par «sl_». Le format de la commande nous est déjà familier. Nous changeons simplement le terme de recherche, le terme de remplacement et le type de fichier.

rename 's/slang_/sl_' *.c

renommer 's / slang_ / sl_' * .c dans une fenêtre de terminal

Cette fois, nous recherchons des fichiers «.c», et recherchons «slang_». Chaque fois que «slang_» est trouvé dans un nom de fichier, il est remplacé par «sl_».

  Ajouter des gestes d'activation pour l'application de musique avec un ajustement Cydia [Jailbreak]

Nous pouvons vérifier le résultat de cette commande en répétant la commande ls ci-dessus avec les mêmes paramètres:

ls sl*.c

ls sl * .c dans une fenêtre de terminal

Suppression d’une partie d’un nom de fichier

Nous pouvons supprimer une partie d’un nom de fichier en remplaçant le terme de recherche par rien.

ls *.c
rename 's/sl_//' *.c
ls *.c

renommer 's / sl _ //' * .c dans une fenêtre de terminal

Nous pouvons voir à partir de la commande ls que nos fichiers «.c» sont tous précédés de «sl_». Débarrassons-nous complètement de cela.

La commande renommer suit le même format qu’avant. Nous allons rechercher des fichiers «.c». Le terme de recherche est «sl_», mais il n’y a pas de terme de substitution. Deux barres obliques inverses sans rien entre elles ne signifient rien, une chaîne vide.

renommer traitera chaque fichier «.c» à son tour. Il recherchera «sl_» dans le nom du fichier. S’il est trouvé, il ne sera remplacé par rien. En d’autres termes, le terme de recherche est supprimé.

La deuxième utilisation de la commande ls confirme que le préfixe «sl_» a été supprimé de chaque fichier «.c».

Limiter les modifications à des parties spécifiques des noms de fichiers

Utilisons ls pour regarder les fichiers qui ont la chaîne «param» dans leur nom de fichier. Ensuite, nous utiliserons renommer pour remplacer cette chaîne par la chaîne «paramètre». Nous utiliserons encore une fois ls pour voir l’effet de la commande renommer sur ces fichiers.

ls *param*
rename 's/param/parameter' *.c
ls *param*

renommer 's / param / parameter' * .c dans une fenêtre de terminal

Quatre fichiers ont été trouvés avec «param» dans leur nom de fichier. param.c, param_one.c et param_two.c ont tous «param» au début de leur nom. third_param.c a «param» à la fin de son nom, juste avant l’extension.

La commande renommer va rechercher «param» partout dans le nom du fichier, et le remplacer par «paramètre» dans tous les cas.

La deuxième utilisation de la commande ls nous montre que c’est exactement ce qui s’est passé. Que «param» soit au début ou à la fin du nom de fichier, il a été remplacé par «paramètre».

Nous pouvons utiliser les métacaractères de Perl pour affiner le comportement de l’expression du milieu. Les métacaractères sont des symboles qui représentent des positions ou des séquences de caractères. Par exemple, ^ signifie «début d’une chaîne», $ signifie «fin d’une chaîne» et. signifie tout caractère unique (à l’exception d’un caractère de nouvelle ligne).

Nous allons utiliser le début du métacaractère de chaîne (^) pour restreindre notre recherche au début des noms de fichiers.

ls *param*.c
rename 's/^parameter/value/' *.c
ls *param*.c
ls value*.c

renommer 's / ^ paramètre / valeur /' * .c dans une fenêtre de terminal

Les fichiers que nous avons renommés précédemment sont répertoriés, et nous pouvons voir que la chaîne «paramètre» est au début de trois noms de fichiers et à la fin de l’un des noms de fichiers.

  Grammar Nazi vous aide à apprendre l'anglais pendant que vous lisez [Android]

Notre commande renommer utilise le début du métacaractère de ligne (^) avant le terme de recherche «paramètre». Cela indique à renommer de ne considérer que le terme de recherche a été trouvé s’il est au début du nom de fichier. La chaîne de recherche «paramètre» sera ignorée si elle se trouve ailleurs dans le nom de fichier.

En vérifiant avec ls, nous pouvons voir que le nom de fichier qui avait «paramètre» à la fin du nom de fichier n’a pas été modifié, mais les trois noms de fichiers qui avaient «paramètre» au début de leurs noms ont eu la chaîne de recherche remplacée par le substitut terme «valeur».

Le pouvoir de renommer réside dans le pouvoir de Perl. La totalité de la puissance de Perl est à votre disposition.

Recherche avec des regroupements

renommer a encore plus de trucs dans sa manche. Considérons le cas où vous pourriez avoir des fichiers avec des chaînes similaires dans leurs noms. Ce ne sont pas exactement les mêmes chaînes, donc une simple recherche et substitution ne fonctionnera pas ici.

Dans cet exemple, nous utilisons ls pour vérifier les fichiers dont nous disposons et qui commencent par «str». Il y en a deux, string.c et strangle.c. Nous pouvons renommer les deux chaînes à la fois en utilisant une technique appelée regroupement.

L’expression centrale de cette commande renommer recherchera des chaînes dans les noms de fichiers qui ont la séquence de caractères «stri» ou «stra» où ces séquences sont immédiatement suivies de «ng». En d’autres termes, notre terme de recherche va chercher «string» et «strang». Le terme de substitution est «bang».

ls str*.c
rename 's/(stri|stra)ng/bang/' *.c
ls ban*.c

renommer 's / (stri | stra) ng / bang /' * .c dans une fenêtre de terminal

L’utilisation de ls une deuxième fois confirme que string.c est devenu bang.c et strangle.c est maintenant bangle.c.

Utilisation des traductions avec renommer

La commande renommer peut effectuer des actions sur les noms de fichiers appelées traductions. Un exemple simple de traduction serait de forcer un ensemble de noms de fichiers en majuscules.

Dans la commande renommer ci-dessous, notez que nous n’utilisons pas de s / pour démarrer l’expression centrale, nous utilisons y /. Cela indique à renommer que nous n’effectuons pas de substitution; nous effectuons une traduction.

Le terme az est une expression Perl qui signifie tous les caractères minuscules de la séquence de a à z. De même, le terme AZ représente toutes les lettres majuscules dans la séquence de A à Z.

L’expression centrale de cette commande pourrait être paraphrasée comme suit: «si l’une des lettres minuscules de a à z se trouve dans le nom de fichier, remplacez-la par les caractères correspondants de la séquence de caractères majuscules de A à Z».

Pour forcer les noms de fichiers de tous les fichiers «.prg» en majuscules, utilisez cette commande:

renommer ‘y / az / AZ /’ * .prg

ls *.PRG

renommer 'y / az / AZ /' * .prg dans une fenêtre de terminal

La commande ls nous montre que tous les noms de fichiers «.prg» sont maintenant en majuscules. En fait, pour être strictement précis, ce ne sont plus des fichiers «.prg». Ce sont des fichiers «.PRG». Linux est sensible à la casse.

Nous pouvons inverser cette dernière commande en inversant la position des termes az et AZ dans l’expression centrale.

renommer ‘y / AZ / az /’ * .PRG

ls *.prg

renommer 'y / AZ / az /' * .PRG dans une fenêtre de terminal

Vous n’apprendrez (Wo | Do) pas Perl en cinq minutes

Se familiariser avec Perl est du temps bien dépensé. Mais pour commencer à utiliser les capacités de gain de temps de la commande renommer, vous n’avez pas du tout besoin d’avoir beaucoup de connaissances Perl pour récolter de gros avantages en puissance, simplicité et temps.