2016-07-08 24 views
0

Ich bin ein Student und ich bin sehr neu zu bash, so dass jede Hilfe sehr geschätzt wird!Batch umbenennen Dateinamen zwischen Bindestrichen mit bash

Ich versuche, einen Stapel von Dateien umzubenennen, die wie folgt aussehen: local_date_1415 + 6556_0001.txt und local_date_1415 + 6556_0002.txt.

Beispiel Dateiname: uuw_07052006_1415 + 6556_0001.txt

Ich brauche die "1415 + 6556" in jedem Dateinamen einen 2M vor, es zu haben, wie "2M1415 + 6556". Etwa die Hälfte der Dateien im Ordner haben bereits die 2M, so dass ich nicht einfach nach der Zeichenfolge suchen und ersetzen kann.

Gibt es eine Möglichkeit, den Stapel von Dateien mit "_" als Trennzeichen umzubenennen, damit ich alle dritten Abschnitte vollständig mit der richtigen Zeichenfolge ersetzen konnte?

Ich habe den Umbenennungsbefehl auf meiner Maschine, ich bin nur nicht sicher, wie man es hier benutzt.

+0

Welche Umbenennungs Befehl haben Sie [Umbenennen] (http://linux.die.net/man/1/rename) oder [Umbenennen] (http://manpages.ubuntu.com/manpages/trusty/man1/prename.1.html)? – choroba

+0

Bitte zeigen Sie auch einen Beispieldateinamen an, welches Format hat das "lokale Datum"? – choroba

+0

Wie überprüfe ich, um welche? – morepenguins

Antwort

0

Mit Ihrer Version von rename:

rename _ % *_????+*.txt # replace the first underscore with a percent 
rename _ _2M *_????+*.txt # add 2M after the second underscore 
rename % _ *_2M????+*.txt # return the first underscore back 

funktioniert nur, wenn Ihre Dateinamen % nicht enthalten. Wenn sie dies tun, wählen Sie einen anderen Charakter.

Sie können auch die Schleife selbst schreiben:

#! /bin/bash 
for f in *_????+*.txt ; do 
    before=${f%[0-9][0-9][0-9][0-9]+*} 
    after=${f#*_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]} 
    mv "$f" "$before"2M"$after" 
done 
+0

Danke! Das Problem ist die Hälfte meiner Dateien haben bereits die 2M. Gibt es eine Möglichkeit, es zu programmieren, also fügt es nicht die 2M hinzu, wenn es schon da ist? – morepenguins

+0

@morepenguins: Oh, tut mir leid, aktualisiert. – choroba

+0

Vielen Dank! Ich habe noch nicht genug Punkte um deine Antwort zu bekommen (hoffentlich werde ich später!). Es hat perfekt funktioniert. Ich hatte nur eine Änderung in der letzten Zeile im ersten Code: 'rename% _ * _2M ???? + *. Txt'' – morepenguins