Familiarisez-vous avec la puissance de renommage des fichiers du monde Linux et fournissez mv
—Et toi— une pause. Rename
c'est souple, vite et, parfois, encore plus facile. Voici un tutoriel de cette puissante commande.
Qu'en est-il de mv?
Il n'y a rien de mal à mv
. La commande fait bon travail, et on le trouve dans toutes les distributions Linux, sur macOS et autres systèmes d'exploitation de type Unix. C'est pourquoi il est toujours activé. Mais de temps en temps tu as juste besoin d'un bulldozer, pas une pelle.
Les mv
La commande a un but dans la vie et c'est de déplacer des fichiers. C'est un effet secondaire heureux qui 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 on obtient ce qu'on veut. Mais mv
pas un outil de renommage de fichier dédié.
Renommer un seul fichier avec mv
Utilisation mv
pour renommer un type de fichier mv
, un espace, le nom du fichier, un espace et le nouveau nom que vous voulez que le fichier ait. Puis appuyez sur Entrée.
Vous pouvez utiliser ls
pour vérifier que le nom du fichier a été modifié.
mv ancienfichier.txt nouveaufichier.txt
ls *.txt
Renommer plusieurs fichiers avec mv
Les choses se compliquent lorsque vous souhaitez renommer plusieurs fichiers. mv
n'a pas la possibilité de renommer plusieurs fichiers. Vous devez recourir à quelques astuces astucieuses de bash. C'est bien si vous connaissez une ligne de commande de qualité moyenne fu, mais la complexité de renommer plusieurs fichiers avec mv
contraste avec la facilité d'utilisation mv
renommer un seul fichier.
Les choses dégénèrent rapidement.
Disons que nous avons un répertoire avec une gamme de fichiers, de différentes sortes. Certains de ces fichiers ont une extension “.programme”. Nous voulons les renommer sur la ligne de commande afin qu'ils aient une extension “.prg”.
Comment combattons-nous? mv
faire ça pour nous? Jetons un œil aux archives.
ls * .prog -l
Voici un moyen de le faire qui ne recourt pas à l'écriture d'un véritable fichier de script bash.
pour f dans *.prog; faire mv -- "$F" "${f%.prog}.prg"
Ça a marché? Parcourons les fichiers et voyons.
ls *.pr*
Ensuite, Oui, ça a marché. Maintenant ce sont tous des fichiers “.prg” et il n'y a pas de fichiers “.programme” Dans le carnet d'adresses.
Qu'est-ce qui vient juste de se passer?
Qu'est-ce que cette longue commande a vraiment fait? Analysons-le.
pour f dans *.prog; faire mv -- "$F" "${f%.prog}.prg"
La première partie démarre une boucle qui traitera chaque fichier “.programme” Dans le carnet d'adresses, à la fois.
La partie suivante indique ce que le traitement va faire. faire. Utilise mv
pour déplacer chaque fichier vers un nouveau fichier. Le nouveau fichier sera nommé avec le nom de fichier d'origine à l'exclusion de la pièce “.programme”. À sa place, une nouvelle extension de “.prg”.
Il doit y avoir un moyen plus simple
Absolument. C'est lui rename
commander.
rename
ne fait pas partie d'une distribution Linux standard, il va donc falloir l'installer. Il a également un nom différent dans différentes familles Linux, mais ils fonctionnent tous de la même manière. Vous n'aurez qu'à substituer le nom de la commande appropriée selon le type de Linux que vous utilisez.
sur les distributions dérivées d'Ubuntu et Debian que vous installez rename
comme ça:
sudo apt-get install renommer
Dans les distributions dérivées de Fedora et RedHat, installer prename
comme ça. Veuillez noter le “p” initiale, ce qui veut dire Perl.
sudo dnf installer le prénom
Pour l'installer sur Manjaro Linux utilisez la commande suivante. Notez que la commande rename est appelée perl-rename
.
sudo pacman -Syu perl-renommer
Faisons le encore
Et cette fois, nous utiliserons rename
. Nous allons remonter le temps pour avoir un ensemble de fichiers “.programme”.
ls * .prog
Utilisons maintenant la commande suivante pour les renommer. Plus tard, nous le vérifierons avec ls
oui ça a marché. N'oubliez pas de remplacer rename
avec le nom de commande approprié pour votre Linux si vous n'utilisez pas Ubuntu ou un Linux dérivé de Debian.
renommer 's/.prog/.prg/' *.prog
ls *.pr*
Ça a marché, maintenant ce sont tous des fichiers “.prg” et il n'y a pas de fichiers “.programme” Dans le carnet d'adresses.
Que s'est-il passé à ce moment?
Expliquons ce petit peu de magie, en trois parties.
Les premier part est le nom de la commande, rename
(O prename
O perl-rename
, pour les autres distributions).
Les dernier une partie est *.prog
, que dit-il rename
pour opérer sur tous les fichiers “.programme”.
Les demi part définit le travail que nous voulons faire sur chaque nom de fichier. Les s
signifie substitut. Le premier terme (.prog
) Qu'est que c'est rename
recherchera chaque nom de fichier et deuxième terme (.prg
) est ce qui sera remplacé.
La partie centrale de la commande, ou expression centrale, est un Perl ‘expression régulière‘Et c’est ce qui donne le rename
maîtriser votre flexibilité.
Modifier d'autres parties d'un nom de fichier
Nous avons changé les extensions de nom de fichier jusqu'à présent, modifions d'autres parties des noms de fichiers.
Il y a beaucoup de fichiers de code source C dans le répertoire. Tous les noms de fichiers ont le préfixe “argot_”. Nous pouvons vérifier cela avec ls
.
ls sl*.c
Nous remplacerons toutes les occurrences de “argot_” avec “sl_”. Le format de la commande nous est déjà familier. Nous changeons seulement le terme de recherche, le terme de remplacement et le type de fichier.
renommer 's/argot_/sl_' *.c
Cette fois, nous recherchons des fichiers “.c” et nous cherchons “argot_”. Chaque fois qu'il est trouvé “argot_” dans un nom de fichier, est remplacé par “sl_”.
Nous pouvons vérifier le résultat de cette commande en répétant la ls
commande d'en haut avec les mêmes paramètres:
ls sl*.c
Supprimer 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
renommer 's/sl_//' *.c
ls *.c
Nous pouvons voir de la ls
commande que tous nos fichiers “.c” sont précédés de “sl_”. Débarrassons-nous-en complètement.
Les rename
La commande suit le même format que précédemment. 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 veulent rien dire, une chaîne vide.
rename
traitera chaque fichier “.c” à la fois. va chercher “sl_” dans le nom du fichier. Si trouvé, ne sera remplacé par rien. Autrement dit, le terme de recherche est supprimé.
La deuxième utilisation de ls
La commande confirme que le préfixe “sl_” a été supprimé de tous les fichiers “.c”.
Limiter les modifications à des parties spécifiques des noms de fichiers
Utilisons ls
pour afficher les fichiers contenant la chaîne “paramètre” dans votre nom de fichier. Ensuite, nous utiliserons rename
pour remplacer cette chaîne par la chaîne “paramètre”. nous utiliserons ls
une fois de plus pour voir l'effet rename
commande avait dans ces fichiers.
ls * param *
renommer 's/param/paramètre' *.c
ls * param *
Il y a quatre fichiers qui ont “paramètre” dans votre nom de fichier. param.c, param_one.c et param_two.c disponen “paramètre” dans le début de son nom. Third_param.c tiene “paramètre” dans le fin de son nom, juste avant la prolongation.
Les rename
La commande cherchera “paramètre” partout dans le nom du fichier et remplacez-le par “paramètre” dans tous les cas.
La deuxième utilisation de ls
La commande nous montre que c'est exactement ce qui s'est passé. Et “paramètre” était au début ou à la fin du nom de fichier, a été remplacé par “paramètre”.
Nous pouvons utiliser les métacaractères Perl pour affiner le comportement de l'expression moyenne. Les métacaractères sont des symboles qui représentent des positions ou des séquences de caractères. Par exemple, ^
ça veut dire “début d'une chaîne”, $
ça veut dire “fin d'une chaîne” Oui .
signifie n'importe quel caractère (à part un caractère de nouvelle ligne).
Nous allons utiliser le début du métacaractère de chaîne ( ^
) restreindre notre recherche au début des noms de fichiers.
ls *stop*.c
renommer 's/^parameter/value/' *.c
ls *stop*.c
valeur ls*.c
Les fichiers que nous avons précédemment renommés 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.
Notre rename
la commande utilise le début de la ligne (^
) métacaractère avant le terme de recherche “paramètre”. Cela dit rename
de ne considérer le terme de recherche trouvé que s'il se trouve au début du nom de fichier. le “paramètre” de la chaîne de recherche sera ignoré s'il est trouvé ailleurs dans le nom de fichier.
Vérification avec ls
, nous pouvons voir que le nom de fichier qu'il avait “paramètre” dans le fin le nom du fichier n'a pas été modifié, mais les trois noms de fichiers qui avaient “paramètre” dans le début de leurs noms, la chaîne de recherche a été remplacée par le terme de substitution “valeur”.
Le pouvoir de rename
réside dans la puissance de Perl. Toute la puissance de Perl est à votre disposition.
Rechercher avec des clusters
rename
a encore plus d'astuces dans son sac. Considérons le cas où vous pouvez 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 remplacement ne fonctionnera pas ici.
Dans cet exemple, nous utilisons ls
pour vérifier quels fichiers nous avons qui commencent par “str”. Il y a deux d'entre eux, string.cy étrangler.c. Nous pouvons renommer les deux chaînes en même temps en utilisant une technique appelée regroupement.
L'expression centrale de cette rename
La commande recherchera les chaînes dans les noms de fichiers qui ont la séquence de caractères “Stri” O “Stra” où ces séquences sont immédiatement suivies par “ng”. Autrement dit, notre terme de recherche cherchera “chaîne” Oui “Étrangler”. Le terme de substitution est “claquer”.
ls str*.c
renommer 's/(stri|stra)de/bang/' *.c
Est-ce que vous*.c
À l'aide de ls
une deuxième fois confirme que string.c est devenu bang.c et strangle.c est maintenant bangle.c.
Utilisation de traductions avec changement de nom
Les rename
La commande peut effectuer des actions sur les noms de fichiers appelés traductions. Un exemple simple de traduction serait de forcer un ensemble de noms de fichiers en majuscules.
Dans le rename
commande ci-dessous notez que nous n'en utilisons pas s/
pour commencer l'expression centrale, nous utilisons y/
. Cela dit rename
nous ne faisons pas de substitution; nous faisons une traduction.
Les a-z
term est une expression Perl qui signifie tous les caractères minuscules dans la séquence de a à z. De la même manière, les A-Z
terme représente toutes les lettres majuscules dans la séquence de A à Z.
L'expression de base de cette commande pourrait être paraphrasée comme “si l'une des lettres minuscules de a à z se trouve dans le nom de fichier, remplacez-les 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” majuscule, utilise cette commande:
renommer 'y / les / de A à Z /’ * .prg
ls * .PRG
Les ls
La commande nous montre que tous les noms de fichiers “.prg” sont maintenant en majuscule. En réalité, pour être strictement précis, ce ne sont plus des fichiers “.prg”. ce sont des fichiers “.GRP”. Linux est sensible à la casse.
Nous pouvons inverser cette dernière commande en inversant la position du a-z
Oui A-Z
termes dans l'expression centrale.
renommer 'y / LES / les /’ * .GRP
ls * .prg
Vous n'apprenez 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 du rename
commander, vous n'avez pas besoin de beaucoup de connaissances de Perl pour obtenir de grands avantages potentiels, simplicité et temps.
setTimeout(fonction(){
!fonction(F,b,e,v,m,t,s)
{si(f.fbq)revenir;n=f.fbq=fonction(){n.callMethod?
n.callMethod.apply(m,arguments):n.queue.push(arguments)};
si(!f._fbq)f._fbq=n;n.push=n;n.chargé=!0;n.version=’2.0′;
n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertAvant(t,s) } (window, document,'scénario',
'https://connect.facebook.net/en_US/fbevents.js’);
fbq('init', « 335401813750447 »);
fbq('Piste', « Page View »);
},3000);