2016-06-19 9 views
1

Ich habe mehr als tausend Dateien mit ähnlichen Namen in einem Verzeichnis und möchte eine Umbenennung vornehmen. Die Dateien sind von diesem FormatUmbenennen mehrerer Dateien in Linux/Unix

GW_LGMS01-50160306185154-01375272.CDR 
GW_LGMS01-50160306237154-01375272.CDR.00001  
GW_LGMS02-50160306133554-02308872.CDR 
GW_LGMS02-50160306137554-02308872.CDR.00014 
GW_LGMS03-50160306221836-02217475.CDR.00001 
GW_LGMS03-50160306235132-02217475.CDR 

ich auf einmal einen Umbenennungs auf alle von ihnen tun wollen eine 0- vor 50160306 auf allen von ihnen anzuhängen. Das heißt,

GW_LGMS01-0-50160306185154-01375272.CDR 
GW_LGMS01-0-50160306237154-01375272.CDR.00001  
GW_LGMS02-0-50160306133554-02308872.CDR 
GW_LGMS02-0-50160306137554-02308872.CDR.00014 
GW_LGMS03-0-50160306221836-02217475.CDR.00001 
GW_LGMS03-0-50160306235132-02217475.CDR 

50160306 ist, was alle Dateien gemeinsam haben.

+0

In welcher Shell arbeiten Sie? Bash? – Kusalananda

+0

Verwenden Sie 'vorname' http://www.unix.com/man-page/Linux/1/prename/ oder' rename' http://linux.die.net/man/1/rename – Igor

+0

Bash. Danke für die Bearbeitung – oak

Antwort

0

Unter der Annahme, dass -50160306 in den Dateinamen eindeutig zuzuordnen ist, und dass Sie eine Shell verwenden, die ${parameter/pattern/string} (Bash, Kornshell, etc.) versteht:

for f in *.CDR*; do 
    echo mv "$f" "${f/-50160306/-0-50160306}" 
done 

dies mit den echo an Ort und Stelle zu sehen, was würde passieren, dann entfernen Sie die echo, wenn Sie sicher sind, dass es das Richtige tut.

Wenn Sie Angst zu vermasseln sind, setzen Sie einfach die Dateien mit den neuen Namen in einem neuen Ordner:

mkdir renamed 

for f in *.CDR*; do 
    cp "$f" renamed/"${f/-50160306/-0-50160306}" 
done 
+0

Ich bin sprachlos. Worte sind nicht genug. Vielen Dank. es hat genau das gemacht, was ich wollte. Aber wenn mein Verständnis korrekt ist, zeigt das Echo das Ergebnis der Umbenennung an. – oak

+0

Ich hatte wirklich Angst, aber ich musste nur den Mut aufbringen. Sie haben vielleicht richtig geraten, ich bin ein "Neuling". Mir ist auch aufgefallen, dass die Umbenennung den alten Namen überschrieben hat. hoffe der Inhalt wird nicht beeinflusst? – oak

+0

@oak Wenn Sie das Echo aus der ersten Beispielschleife entfernen, wird die Datei an ihren neuen Namen verschoben (d. H. "Datei umbenennen"). Andernfalls wird nur angezeigt, welcher Befehl ausgeführt worden wäre. – Kusalananda

0

Wenn Sie bash nicht verwenden:

#!/bin/sh 
for i in * ; do 
    mv "$i" "$(printf '%s' "$i" | sed 's/\(50160306.*\)/0-\1/')" 
done 
0

Es gibt zwei rename Werkzeuge herumlaufen: eins ist Teil des util-Linux-Pakets, das andere ist Perl basiert (Details siehe this answer). Um herauszufinden, welche Sie haben, überprüfen Sie am Ende der man-Seite (man rename).

Mit dem util-linux-Version können Sie Ihre Dateien wie folgt umbenennen:

rename 50160306 0-50160306 * 

und für die Perl-basierte Version, wäre es (nicht getestet!) Sein

rename 's/50160306/0-$&/' * 

Seien Sie sich bewusst, dass Es gibt keine Sicherheitsmaßnahmen mit diesen Befehlen – testen Sie sie an einer kleinen Probe, bevor Sie sie verwenden.