2016-04-20 4 views
1

Ich habe ein Verzeichnis Unterverzeichnisse mit Bilddateien mit einem falschen Namen so wie filename.jpg.jpg enthält, möchte ich filename.jpg dieses recursiveley mit ersetzen Ich habe versucht:Wie ersetzen rekursiv Teil des Dateinamens im bash

find ./ -type f -exec sed -i 's/string1/string2/g' {} \; 

oder

sed -i 's/foo/bar/g' * 

aber keiner arbeitet

danke

+0

Ich schlage vor, Sie verwenden das Rename-Tool, es ist ziemlich mächtig für die Umbenennung. – smartmic

Antwort

1
find ./ -iname "*.jpg.jpg" -exec rename .jpg.jpg .jpg '{}' \; 

Wenn Sie ein rename Dienstprogramm haben, die Perl reguläre Ausdrücke verwendet, dann den folgenden Befehl verwenden:

find ./ -iname "*.jpg.jpg" -exec rename 's/\.jpg\.jpg$/.jpg/' '{}' \; 
+0

das funktioniert ganz gut für mich, der Umbenennen Befehl hat nicht funktioniert – papacico

+0

Ich bekomme hier folgendes: 'Syntax Fehler bei (Eval 1) Zeile 1, in der Nähe von". "' – volpato

+0

@volpato: Sorry, was ist das alles Über? – sjsam

1

sein können Sie den eingebauten rename Befehl verwenden können.

rename 's/\.jpg\.jpg$/.jpg/' *.jpg.jpg 

Das erste Argument ist ein regulärer Ausdruck, mit .jpgSpiel Endung Dateinamen in .jpg.jpg und ersetzen würden. Das zweite Argument wird aussehen für Dateien mit .jpg.jpg Format im aktuellen Verzeichnis.

Für weitere Informationen lesen Sie die Manpage.

+0

Ist es auf den aktuellen Ordner beschränkt? – sjsam

+0

Nein. Sie können den Pfad des Ordners angeben, um Dateien zu suchen. – Aditya