Pour faire suite à ma question précédente , si j'ai plusieurs fichiers du formulaire
sw.ras.001
sw.ras.002
sw.ras.003
…
Quelle commande puis-je utiliser pour supprimer le ras.
au milieu de tous les fichiers?
Pour faire suite à ma question précédente , si j'ai plusieurs fichiers du formulaire
sw.ras.001
sw.ras.002
sw.ras.003
…
Quelle commande puis-je utiliser pour supprimer le ras.
au milieu de tous les fichiers?
ras
, c'est-à-dire se retrouver avecsw..001
, ou leras.
, partirsw.001
?\.
dans les modèles.Réponses:
Vous pouvez le faire avec une assez petite modification de l'une ou l'autre réponse de la dernière question:
ou
Explication:
rename
est unperl
script qui prend uneperl
expression régulière et une liste de fichiers, applique tour à tour l'expression régulière au nom de chaque fichier et renomme chaque fichier en résultat de l'application de l'expression régulière. Dans notre cas,ras
correspond littéralement et\.
correspond à un littéral.
(comme.
seul indique un caractère autre qu'un retour à la ligne), et il le remplace par rien.La
for
boucle prend tous les fichiers commençant parsw.ras.
(glob shell standard) et les boucle sur eux.${var/search/replace}
recherches$var
poursearch
et remplace la première occurrence avecreplace
, si les${file/ras./}
rendements$file
avec le premierras.
enlevé. La commande renomme ainsi le fichier sous le même nom moinsras.
. Notez qu'avec cette recherche et remplacement,.
est pris littéralement, pas comme un caractère spécial.la source
Une autre option consiste à utiliser mmv (Mass MoVe et renommer):
N'oubliez pas d'utiliser les guillemets simples autour de vos motifs, sinon les étoiles seront agrandies au niveau de la coque.
L'utilitaire n'est pas toujours disponible mais sinon, vous pouvez l'installer avec:
Voir la page de manuel ici .
la source
En tout état de shell compatible POSIX (
bash
,dash
,ksh
, etc.):Ou avec
rename
:la source
J'ai récemment dû faire un renommage en masse d'un certain nombre de fichiers où j'ai dû remplacer la dernière occurrence d'un caractère où le caractère s'est produit plusieurs fois dans les noms de fichiers. Dans ce cas particulier, j'ai dû remplacer le dernier tiret
-
par un trait de soulignement_
, en transformant ceci:en cela:
Cela a pris du temps, mais cela a finalement réussi:
Ici:
${i%-*}
correspond au début du nom de fichier jusqu'à la dernière occurrence du tiret-
${file##*-}
correspond au reste du nom de fichier après la dernière occurrence du tiret-
la source