web-dev-qa-db-fra.com

Comment renommer plusieurs fichiers en une seule commande ou un seul script sous Unix?

J'ai la liste des fichiers ci-dessous

aro_tty-mIF-45875564pmo_opt
aro_tty-mIF-45875664pmo_opt
aro_tty-mIF-45875964pmo_opt
aro_tty-mIF-45875514pmo_opt
aro_tty-mIF-45875524pmo_opt

que je dois renommer

aro_tty-mImpFRA-45875564pmo_opt
aro_tty-mImpFRA-45875664pmo_opt
aro_tty-mImpFRA-45875964pmo_opt
aro_tty-mImpFRA-45875514pmo_opt
aro_tty-mImpFRA-45875524pmo_opt
62
Udhayakumar

La plupart des shells standard offrent un moyen de faire une substitution de texte simple dans les variables Shell. http://tldp.org/LDP/abs/html/parameter-substitution.html explique comme suit:

${var/Pattern/Replacement}

First match of Pattern, within var replaced with Replacement.

Utilisez donc ce script pour parcourir tous les fichiers appropriés et renommer chacun d'eux:

for file in aro_tty-mIF-*_opt
do
    mv -i "${file}" "${file/-mIF-/-mImpFRA-}"
done

J'ai ajouté une option -i pour que vous puissiez confirmer chaque opération de changement de nom. Comme toujours, vous devez faire une sauvegarde de tous vos fichiers avant de renommer ou de supprimer une grande quantité.

79
Mark Plotnick

Si vous n'avez pas le rename de Perl:

Perl -e '
FILE:for $file (@ARGV){
        ($new_name = $file) =~ s/-mIF-/-mImpFRA-/
        next FILE if -e $new_name;
        rename $file => $new_name
}' *_opt

Si vous faites avez le rename de Perl:

rename 's/-mIF-/-mImpFRA-/' *_opt
20
Joseph R.

Avant d'essayer des commandes complexes comme les suivantes, sauvegardez vos fichiers. Vous ne savez jamais ce qu'une faute de frappe (la mienne ou la vôtre) peut causer.

Avec mv (comme vous l'avez demandé dans le commentaire --- rename comme suggéré dans l'autre réponse est probablement plus sûr, surtout si vous pouvez avoir des espaces ou des caractères étranges dans vos noms de fichiers) quelque chose du style

for f in *_opt; do
    a="$(echo $f | sed s/-mIF-/-mImpFRA-/)"
    mv "$f" "$a"
done
17
Rmano