it-swarm.com.de

Wie benenne ich mehrere Dateien in einem einzigen Befehl oder Skript unter Unix um?

Ich habe die folgende Liste von Dateien

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

das muss ich umbenennen

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

Die meisten Standard-Shells bieten eine Möglichkeit zum einfachen Ersetzen von Text innerhalb von Shell-Variablen. http://tldp.org/LDP/abs/html/parameter-substitution.html erklärt Folgendes:

${var/Pattern/Replacement}

First match of Pattern, within var replaced with Replacement.

Verwenden Sie dieses Skript, um alle entsprechenden Dateien zu durchlaufen und jede davon umzubenennen:

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

Ich habe eine Option -i hinzugefügt, damit Sie die Möglichkeit haben, jeden Umbenennungsvorgang zu bestätigen. Wie immer sollten Sie eine Sicherungskopie aller Ihrer Dateien erstellen, bevor Sie eine große Menge umbenennen oder löschen.

79
Mark Plotnick

Wenn Sie Perls rename nicht haben:

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

Wenn Sie do Perls rename haben:

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

Bevor Sie komplexe Befehle wie die folgenden ausführen, sichern Sie Ihre Dateien. Sie wissen nie, was ein Tippfehler (meiner oder Ihres) verursachen kann.

Mit mv (wie Sie im Kommentar gefragt haben --- rename, wie in der anderen Antwort vorgeschlagen, ist es wahrscheinlich sicherer, besonders wenn Sie Leerzeichen oder seltsame Zeichen in Ihren Dateinamen haben können) etwas vom Stil

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