Comment puis-je remplacer en bloc le préfixe de nombreux fichiers?
J'ai beaucoup de fichiers comme
- TestSRConnectionContext.h
- TestSRConnectionContext.m
Je voudrais changer tous en
- CLConnectionContext.h
- CLConnectionContext.m
Comment je ferais ça?
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:Si vous voulez utiliser la version de util-linux-ng dans un système Debian, elle est disponible sous le nom
rename.ul
la source
rename
existent dans la nature. Consultez votrerename
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
).la source
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}
-> 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 nomla source
Vous pouvez essayer avec:
Voir
man bash
(section "Extension des paramètres") pour plus de détails.la source
Eh bien, ce n’était pas aussi difficile que moi.
la source
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
la source