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?
\.
dans les modèles.
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?
\.
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:
rename s/ras\.// sw.ras.*
ou
for file in sw.ras.*; do
mv "$file" "${file/ras./}"
done
Explication:
rename
est un perl
script qui prend une perl
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 par sw.ras.
(glob shell standard) et les boucle sur eux. ${var/search/replace}
recherches $var
pour search
et remplace la première occurrence avec replace
, si les ${file/ras./}
rendements $file
avec le premier ras.
enlevé. La commande renomme ainsi le fichier sous le même nom moins ras.
. Notez qu'avec cette recherche et remplacement, .
est pris littéralement, pas comme un caractère spécial.
Une autre option consiste à utiliser mmv (Mass MoVe et renommer):
mmv '*ras.*' '#1#2'
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:
sudo apt-get install mmv
Voir la page de manuel ici .
En tout état de shell compatible POSIX ( bash
, dash
, ksh
, etc.):
for file in sw.ras.[[:digit:]][[:digit:]][[:digit:]]; do
mv "${file}" "${file/ras\./}"
done
Ou avec rename
:
rename 's/ras\.//' sw.ras.[[:digit:]][[:digit:]][[:digit:]]
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:
some-long-file-name.ext
en cela:
some-long-file_name.ext
Cela a pris du temps, mais cela a finalement réussi:
for FILE in *; do mv $FILE ${FILE%-*}_${FILE##*-}; done
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 -
ras
, c'est-à-dire se retrouver avecsw..001
, ou leras.
, partirsw.001
?