31 Stimmen

JPG-Dateien nach dem Erstellungsdatum umbenennen

Ich möchte alle Dateien in einem bestimmten Verzeichnis umbenennen. Sie sollen nach ihrem Erstellungsdatum umbenannt werden.
Wenn meine Datei also Image1.jpg heißt, sollte sie in etwas wie "Jan 16 12:09:42 2011.jpg" umbenannt werden.
Ich möchte dies über die Befehlszeile tun. Ich habe es schon versucht:

stat -f %SB Image0100.jpg

Aber wie kann ich das kombinieren mit mv Befehl? Und wie wird die Iteration stat et mv durch die gesamten Akten?
Oder gibt es eine einfache Möglichkeit, alle Dateien nach ihrem Erstellungsdatum umzubenennen?

1voto

DigitalRoss Punkte 138823
$ for i in *; do mv "$i" "`stat -f %SB $i`"; done

1voto

akond Punkte 15345
find . -type f | xargs stat -f "mv %%N \"%%SB.jpg\"" | awk -F \; '{system $1;}'

1voto

three Punkte 7926

Wenn Sie, wie ich, immer wieder googeln müssen, weil Sie älter werden und sich Dinge nicht mehr merken können, können Sie auch gThumb verwenden, das eine Stapelumbenennung enthält, die gut funktioniert und eine Vorschau alter Name -> neuer Name bietet. Wirklich nett.

0voto

Jonathan Leffler Punkte 694013

Unter MacOS X 10.6.6 mit Bash (und, ich glaube, auch mit der Korn-Shell) funktioniert dies bei Dateinamen mit Leerzeichen darin:

echo > "x y"
for file in *
do
    x=$(stat -f '%SB' -t '%Y%m%d.%H%M%S' "$file")
    mv "$file" "$x"
done

Außerdem werden Datum und Uhrzeit in der von ISO 8601 abgeleiteten Notation angegeben. Wenn zwei Dateien die gleiche Änderungszeit haben, bleibt natürlich nur die letzte dieser Dateien in alphabetischer Reihenfolge erhalten. Dadurch gehen auch alle Suffixe verloren. Wenn Sie es mit '.jpg'-Dateien zu tun haben, würden Sie wahrscheinlich verwenden wollen:

echo > "x y,jpg"
for file in *.jpg
do
    x=$(stat -f '%SB' -t '%Y%m%d.%H%M%S.jpg' "$file")
    mv "$file" "$x"
done

Da der Ausgabenname ($x) keine Leerzeichen enthält, sind die Anführungszeichen um "$x" im move-Befehl nicht erforderlich, aber ihr Vorhandensein ist konsistent.

0voto

tchrist Punkte 76479

Verwenden Sie einfach exiftool . Hier ist ein Beispiel aus seine Dokumentation :

   exiftool -r '-FileName<CreateDate' -d %Y-%m-%d/%H%M_%%f.%%e dir
        Both the directory and the filename may be changed together via the
        "FileName" tag if the new "FileName" contains a '/'.  The example above
        recursively renames all images in a directory by adding a "CreateDate"
        timestamp to the start of the filename, then moves them into new
        directories named by date.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X