Rename von mehreren Dateien per Skript?

Status
Für weitere Antworten geschlossen.

jschor

Benutzer
Mitglied seit
14. Apr 2015
Beiträge
6
Punkte für Reaktionen
0
Punkte
0
Hallo liebe Forumgemeinde,

ich bin seit Langem auf der Suche nach einem Tool/Skript, mit dem ich meine hochgeladenen Bilder so umbenennen kann, dass das Erstelldatum vorn angestellt ist. Derzeit verwende ich dafür XnConvert. Das funktioniert zwar ganz gut, aber meine Netzwerkperformance lässt extrem zu wünschen übrig und so dauert das ewig, hunderte Bilder umzubenennen (weil er sich die Daten erst lokal kopiert, umbenennt und zurückkopiert).

Gibt es nicht eine Möglichkeit, ein Skript auf der Box laufen zu lassen, das mir die Bilder kopiert (zur Sicherheit) und mit dem gewünschten Namen speichert? Ich bin bisher im Internet auch auf nichts sinnvolles gestoßen - wahrscheinlich habe nicht gründlich genug gesucht. :rolleyes: Als Paket habe ich uRename gefunden, es aber bisher nicht zum Laufen gebracht...

Wäre über eure Hilfe oder Ratschläge sehr dankbar!

Viele Grüße,
Johannes
 

ruedi61

Gesperrt
Mitglied seit
01. Apr 2016
Beiträge
72
Punkte für Reaktionen
0
Punkte
6
Wie sieht den der Dateiname vorher aus und wie soll er nachher aussehen?
Sollte mit einem simplen Bash Script möglich sein.
 

dil88

Benutzer
Contributor
Sehr erfahren
Mitglied seit
03. Sep 2012
Beiträge
30.612
Punkte für Reaktionen
2.003
Punkte
829
Anbei ein Vorschlag, wie man das prinzipiell machen könnte:

Rich (BBCode):
#!/bin/sh

verzeichnis="NAME_DES_VERZEICHNISSES"
cd $verzeichnis
for datei in *; do
  datum="`/bin/date -Idate -r $datei`"
  /bin/mv $datei "$datum"_"$datei"
done

Bitte erst mit Testdaten ausprobieren!
 
Zuletzt bearbeitet:

bitrot

Benutzer
Mitglied seit
22. Aug 2015
Beiträge
878
Punkte für Reaktionen
0
Punkte
36
TotalCommander - Mehrfach-Umbenenn-Tool ist Dein Freund.
 

AndiHeitzer

Benutzer
Sehr erfahren
Mitglied seit
30. Jun 2015
Beiträge
3.322
Punkte für Reaktionen
613
Punkte
174
Ich verwende dafür XnView, der mir aus dem Exif-Daten die Bilddateien umbenennt, ohne dass diese umkopiert werden. Meine Dateien laufen dann nach dem Schema jjjjmmtt-hhmmss.jpg
 

jschor

Benutzer
Mitglied seit
14. Apr 2015
Beiträge
6
Punkte für Reaktionen
0
Punkte
0
Hallo zusammen,

danke für die zahlreichen Antworten in dieser kurzen Zeit.

Wie sieht den der Dateiname vorher aus und wie soll er nachher aussehen?
Sollte mit einem simplen Bash Script möglich sein.

Aus IMG_2456.JPG soll 2015-10-15_17-23-05_IMG_2456.JPG werden - mit dem Aufnahmedatum vorn dran.

Anbei ein Vorschlag, wie man das prinzipiell machen könnte:

Rich (BBCode):
#!/bin/sh

verzeichnis="NAME_DES_VERZEICHNISSES"
cd $verzeichnis
for datei in *; do
  datum="`/bin/date -Idate -r $datei`"
  /bin/mv $datei "$datum"_"$datei"
done

Bitte erst mit Testdaten ausprobieren!

Ich habe das Skript mal so nachprogrammiert und es funktioniert auch - bis auf, dass das Änderungsdatum und nicht das Erstelldatum des Bildes verwendet wird. Was muss da stehen, um das Erstelldatum zu verwenden?
Genau nach so etwas hatte ich gesucht. Und nun wäre es noch fein, wenn man das Eingabeverzeichnis als Parameter mitgeben könnte. Und ggf. eine Startzeit zum Umwandeln festlegen kann - möglicherweise dauert das Umbenennen etwas länger.

Lokal wollte ich die Bilder nicht umbenennen, weil ich manche Dateien direkt auf die Box kopierte und nicht den Umweg über einen lokalen Rechner gehen möchte.

Zu den Tools:
ExifTool schaue ich mir mal an - sieht so aus, als kann das genau das, was ich suche...
TotalCommander läuft ja nur lokal, oder?
Joe ist nur lokal...
XnView ist die "Mutter" von XnConvert - das verwende ich bereits. ;)

Danke und viele Grüße,
Johannes
 

dil88

Benutzer
Contributor
Sehr erfahren
Mitglied seit
03. Sep 2012
Beiträge
30.612
Punkte für Reaktionen
2.003
Punkte
829
Ich arbeite selbst mit exiftool unter Windows und würde den Weg damit empfehlen. Dort verwende ich folgenden Aufruf:

Rich (BBCode):
exiftool.exe -P "-FileName<DateTimeOriginal" -d %%Y-%%m-%%d_%%H%%M%%S_%%%%f.%%%%e %pfad%

Unter Linux habe ich noch nicht mit exiftool gearbeitet, insofern kann ich nicht sagen, was zu ändern wäre abgesehen davon, dass .exe wegfällt und %pfad% durch $pfad zu ersetzen wäre.

Edit: Einen Parameter beim Aufruf eines Shellskripts kannst Du über den Parameter $1 im Skript verwenden.

Rich (BBCode):
./test.sh test

liefert die Ausgabe "test", wenn darin
Rich (BBCode):
echo $1
steht. So könntest Du einen Pfad übergeben, solltest dessen Existenz allerdings z.B. mittels des test-Kommandos überprüfen, bevor Du ihn nutzt.
 

AndiHeitzer

Benutzer
Sehr erfahren
Mitglied seit
30. Jun 2015
Beiträge
3.322
Punkte für Reaktionen
613
Punkte
174
Unter Linux habe ich noch nicht mit exiftool gearbeitet, ...

Ich habe heute auf Grund des Postings von frogtwist (#7) auf meiner DS das EXIFTOOL erfolgreich eingerichtet.
Davon bin ich begeistert :eek:

Das SHELL-Script schaut bei mir so aus:
Rich (BBCode):
########################################################################
# Script benennt neue Bilder um
########################################################################

##### Variablen vorbereiten
export EXIFBIN=/usr/bin/exiftool
export INPUTPATH="/volume1/MULTIMEDIA/Digital-Fotos/_neu/"
export OUTPUTPATH="/volume1/MULTIMEDIA/Digital-Fotos/_wegsortieren/"
export DATEPATH="%Y%m%d/%Y%m%d-%H%M%S%%-c.%%le"


##### Fehlende Verzeichnisse werden erstellt
if [ ! -d "$INPUTPATH" ]; then
  mkdir $INPUTPATH
  chmod 777 $INPUTPATH -R
  echo Verzeichnis $INPUTPATH wird erstellt.
fi
if [ ! -d "$OUTPUTPATH" ]; then
  mkdir $OUTPUTPATH
  chmod 777 $OUTPUTPATH -R
  echo Verzeichnis $OUTPUTPATH wird erstellt.
fi

##### Ab hier wird mit EXIFTOOL die Bilderserie umbenannt und verschoben
# Quelle:
# http://www.dslr-forum.de/showthread.php?t=1551318

${EXIFBIN} "-filename<CreateDate" -d "${OUTPUTPATH}${DATEPATH}" -r ${INPUTPATH}

Vielen Dank hiermit nochmal an frogtwist!
 

dil88

Benutzer
Contributor
Sehr erfahren
Mitglied seit
03. Sep 2012
Beiträge
30.612
Punkte für Reaktionen
2.003
Punkte
829
Top. Könntest Du bitte ein Beispiel für einen Quelldateinamen und einen Zieldateinamen geben? Bei meinem exiftool-Aufruf bleibt der Dateiname erhalten, ihm wird ein Timestamp in der Form YYYY-MM-DD_HH-MM-SS_ vorangestellt - also so, wie der TO sich das vorstellt. Nur bei mir leider mit den ganzen Windows-Prozentzeichen, die vermutlich zum Escapen nötig sind. Wie ist das bei Dir?
 

AndiHeitzer

Benutzer
Sehr erfahren
Mitglied seit
30. Jun 2015
Beiträge
3.322
Punkte für Reaktionen
613
Punkte
174
Mein Script nimmt vorhandene JPG-Files und benennt nach folgendem Schema um: JJJJMMTT-HHMMSS.JPG
Wie das mit Files aussieht, wenn mehrere innerhalb einer Sekunde erstellt wurden, habe ich noch nicht getestet ...

Zuerst stecke ich meine Fotografien in den Ordner "_neu". (1)
Das Script rennt alle 15 Minuten und hat als Ausgabe-Ordner "_wegsortieren". (2)
Danach verpasse ich dem durch den Script erzeugten Ordner noch einen sprechenden Namen und lege die Bilder endgültig ab. (3)

pix-rename.jpg
 

dil88

Benutzer
Contributor
Sehr erfahren
Mitglied seit
03. Sep 2012
Beiträge
30.612
Punkte für Reaktionen
2.003
Punkte
829
Ok, danke. Dann würde ich dem TO empfehlen, noch mit dem Parameter %%f zu experimentieren, um den originalen Dateinamen zu übernehmen.
 

jschor

Benutzer
Mitglied seit
14. Apr 2015
Beiträge
6
Punkte für Reaktionen
0
Punkte
0
Ok, danke. Dann würde ich dem TO empfehlen, noch mit dem Parameter %%f zu experimentieren, um den originalen Dateinamen zu übernehmen.

Ja, super! Ich habe jetzt eine gute Lösung für mich gefunden:
Rich (BBCode):
exiftool -P "-filename<DateTimeOriginal" -d output/%Y-%m-%d_%H-%M-%S_%%f%%-c.%%le -r input/

Dabei wird der Dateiname wie gewünscht hinter den Timestamp angehängt.

Zwei kleine Fragen hätte ich noch: kann man eine Kopie der Bilddaten im Ordner input (als Backup) belassen? Falls was schief läuft... Und: Weiß jemand, wo der Unterschied zwischen "%%le" und "%%e" für die Dateiendung steht? Findet man nämlich beides im Netz...

Danke schon mal und einen fröhlichen Jahreswechsel,
Johannes
 

dil88

Benutzer
Contributor
Sehr erfahren
Mitglied seit
03. Sep 2012
Beiträge
30.612
Punkte für Reaktionen
2.003
Punkte
829
Sehr schön. Hier die Erklärung des Unterschieds zwischen %%le und %%e:

.%%le means keep the original file name extension, but make it lower-case if it was originally upper-case, a nice option when cameras insist on using "CR2" instead of "cr2". (If you prefer upper-case extensions, then use .%%ue. If you prefer to keep the original case intact, use .%%e.

Belassen würde ich die Dateien nicht dort, wo exiftool Dateien verarbeitet, weil sonst auch die bereits verarbeiteten Dateien angefasst werden müssten.
 

geimist

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
04. Jan 2012
Beiträge
5.507
Punkte für Reaktionen
1.344
Punkte
234

jschor

Benutzer
Mitglied seit
14. Apr 2015
Beiträge
6
Punkte für Reaktionen
0
Punkte
0
Mit dem U.Renamer gibt es auch ein ExifTool basiertes Paket für dieses Vorhaben. Wie flexibel die Umbenennung ist, weiß ich nicht: https://www.cphub.net/?id=40&pid=604

Danke, geimist, für den Tipp. Ich hab U.Renamer sogar schon installiert - bring es aber leider nicht fertig, es zu bedienen. Das war nach meinen ersten Forschungen auch bereits mein erster Treffer - aber bisher leider erfolglos...
 

geimist

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
04. Jan 2012
Beiträge
5.507
Punkte für Reaktionen
1.344
Punkte
234
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat