Réponses:
for name in TestSR*
do
newname=CL"$(echo "$name" | cut -c7-)"
mv "$name" "$newname"
done
Cette méthode utilise la substitution de commande bash pour supprimer les 6 premiers caractères du nom de fichier en entrée cut
, est ajoutée CL
au résultat et stockée dans $newname
. Ensuite, il renomme l'ancien nom en le nouveau. Ceci est effectué sur chaque fichier.
cut -c7-
spécifie que seuls les caractères après l'index 7 doivent être renvoyés à partir de l'entrée. 7-
est une plage commençant à l'indice 7 sans fin; c'est-à-dire jusqu'à la fin de la ligne.
Auparavant, j'avais déjà utilisé cut -b7-
mais je devais -c
plutôt utiliser pour gérer des codages de caractères pouvant comporter plusieurs octets par caractère, comme UTF-8.
Je dirais que le plus simple rename
consiste simplement à utiliser la commande qui est commune à de nombreuses distributions Linux. Il existe deux versions courantes de cette commande. Consultez sa page de manuel pour trouver celle que vous avez:
## rename from Perl (common in Debian systems -- Ubuntu, Mint, ...)
rename 's/^TestSR/CL/' *
## rename from util-linux-ng (common in Fedora systems, Red Hat, CentOS, ...)
rename TestSR CL *
Si vous voulez utiliser la version de util-linux-ng dans un système Debian, elle est disponible sous le nom rename.ul
rename
existent dans la nature. Consultez votre rename
documentation locale pour savoir comment utiliser la vôtre.
rename TestSR '' *
rename "\<pre\>" "" *
->Unterminated <> operator at (user-supplied code).
L’extension des paramètres du shell suffit pour des transformations simples comme celle-ci. La substitution de commande est moins efficace en raison de la nécessité de générer des processus supplémentaires (pour la substitution de commande elle-même et le cut
/ sed
).
for f in TestSR*; do mv "$f" "CL${f#TestSR}"; done
TestSR*
trouve les fichiers, CL${f#TestSR}
sera le nouveau nom. Le contenu après le #
sera remplacé par le nom de fichier ( f
).
Voici un moyen:
ls *.{h,m} | while read a; do n=CL$(echo $a | sed -e 's/^Test//'); mv $a $n; done
ls *.{h,m}
-> Trouver tous les fichiers avec l'extension .h ou .mn=CL
-> Ajouter un préfixe CL au nom du fichiersed -e 's/^Test//'
-> Supprime le préfixe Test du nom de fichiermv $a $n
-> Effectue le changement de nomVous pouvez essayer avec:
for i in TestSR*; do mv ${i} ${i/#TestSR/CL}; done
Voir man bash
(section "Extension des paramètres") pour plus de détails.
Eh bien, ce n’était pas aussi difficile que moi.
$ for f in TestSR*.m; do mv $f CL$(echo $f | cut -c7-); done;
$ for f in TestSR*.h; do mv $f CL$(echo $f | cut -c7-); done;
for f in TestSR*.[mh]
, for f in TestSR*.{m,h}
, for f in TestSR*.m TestSR*.h
.
Si vous avez besoin de quelque chose de plus perlish, vous pouvez le faire
perl -e 'for(@ARGV) { rename($_, $n) if( ($n = $_ ) =~ s/^TestSR/CL/) }' *