2017-12-18 8 views
0

Ich habe einen Ordner mit ein paar tausend jpg-Dateien drin. Das Problem ist, dass einige von ihnen defekt sind, weil sie keinen Punkt zwischen dem Dateinamen und "jpg" (z. B. 123jpg) haben.Hinzufügen von Dateiformat mit Bash

Ich brauche ein Skript, das das beheben würde. Wie mache ich das?

+0

Wie wissen Sie, wo die Dateinamen endet und die Verlängerung beginnt? Ist die Erweiterung immer 3 Zeichen lang? –

+2

'für fn in * jpg; mach ["$ fn" = * ". jpg"] || mv "$ fn" "$ {fn% jpg} .jpg"; fertig? –

+0

Alle Dateien ohne die Erweiterung in diesem Ordner folgen immer dem Muster "*** Dateiname *** _ jpg_", es gibt keine anderen Arten von Dateien, die keine Erweiterung haben. – kajeep33

Antwort

2

mit dem Umbenennungs Befehl

$ rename jpg .jpg *[^.]jpg 
+1

Das funktioniert auch, ohne sich an die Syntax von Schleifen und zusammengesetzten Befehlen erinnern zu müssen. –

+2

Das ist einer der Umbenennungsbefehle herum; Es gibt auch eine Perl-basierte Umbenennung (manchmal auch 'prename' genannt), die wie folgt verwendet wird:' rename 's/jpg $ /. jpg /' * [^.] jpg'. Dies hat den Vorzug, 'anyjpgfilejpg' nicht in' any.jpgfilejpg' zu ändern (obwohl ich nicht sicher bin, ob es ein Risiko beim primitiven 'rename' ist, das in der Frage verwendet wird). +1 für die gute Verwendung von '* [^.] Jpg' als Glob-Ausdruck. –