VolkerRaschek
Anmeldungsdatum: 19. August 2014
Beiträge: 358
Wohnort: Eifel
|
Hallo zusammen,
ich bin in einigen Whatsapp Gruppen und erhalte da drüber immer einige Bilder. Diese habe ich mir auf den Computer gezogen und möchte diese gerne alle umbenennen. Eigentlich benutze ich für so was pyrenamer oder gThumb, wobei diese auf die Exif Informationen von dem Bild zurückgreifen. Leider besitzen die Whatsapp Bilder außer dem Namen keine weiteren Informationen. Ich habe mir ein kleines script zusammen gebaut, dass aus dem Namen des WhatsApp Bildes das Datum raus filtert und anschließend umbenennt. Allerdings habe ich das Problem, dass sobald sich an einem Tag mehr als ein BIld gesendet bzw. empfangen wurde das Script immer meckert, dass es den Dateinamen schon gibt. Wie kann ich das script erweitern, dass beispielsweise die Bildnummer automatisch iteriert? Beispielname eines WhatsApp Bildes
IMG-20160924-WA0016.jpg
IMG-20161002-WA0004.jpg
IMG-20161002-WA0008.jpg Mein script
rename 's/IMG-(\d{4})(\d{2})(\d{2}).*/$1-$2-$3 - WhatsApp Bild.jpg/' *.jpg Ausgabe
2016-09-24 - WhatsApp Bild.jpg
2016-10-02 - WhatsApp Bild.jpg
Bild konnte nicht umbenannt werden. Name schon vorhanden. (2016-10-02 - WhatsApp Bild.jpg) Ziel Ausgabe durch Änderung des Scripts
2016-09-24 - WhatsApp Bild 000.jpg
2016-10-02 - WhatsApp Bild 000.jpg
2016-10-02 - WhatsApp Bild 001.jpg Gruß Volker
|
track
Anmeldungsdatum: 26. Juni 2008
Beiträge: 7174
Wohnort: Wolfen (S-A)
|
Willst Du nicht einfach die letzten 2 oder 3 Ziffern der WA- Numerierung beibehalten ? - oder kommt es Dir darauf an, dass sie auch wirklich in der Reihenfolge, wie sie angeliefert werden, durchgezählt werden ? (Nebenfrage dann: ist die Reihenfolge, die Dein Skript sieht, überhaupt die wie sie von WA vorgelegt wird ?) LG, track
|
VolkerRaschek
(Themenstarter)
Anmeldungsdatum: 19. August 2014
Beiträge: 358
Wohnort: Eifel
|
track schrieb: Kommt es Dir darauf an, dass sie auch wirklich in der Reihenfolge, wie sie angeliefert werden, durch gezählt werden ?
Wenn das möglich ist wäre das super 👍
Nebenfrage dann: ist die Reihenfolge, die Dein Skript sieht, überhaupt die wie sie von WA vorgelegt wird ?
Also, wenn ich das Script sonst anwende beachtet der die Reihenfolge. Ich hoffe ich interpretiere die Frage auch richtig, dass das script eins zu eins auf jeden Dateinamen angewendet wird? Gruß Volker
|
track
Anmeldungsdatum: 26. Juni 2008
Beiträge: 7174
Wohnort: Wolfen (S-A)
|
Nee, ich meinte schon die Reihenfolge, wie sie von WA angeliefert wird ... Überhaupt, woran erkennt man die Reihenfolge, wie sie von WA kommt ? - an den fortlaufenden Nummern, oder gibt es da sowas wie einen Zeitstempel ? Das müsste man ja mal zuerst klären. (Das musst Du mir verraten, ich habe nämlich selber kein WA) track
|
VolkerRaschek
(Themenstarter)
Anmeldungsdatum: 19. August 2014
Beiträge: 358
Wohnort: Eifel
|
track schrieb: Nee, ich meinte schon die Reihenfolge, wie sie von WA angeliefert wird ... Überhaupt, woran erkennt man die Reihenfolge, wie sie von WA kommt ? - an den fortlaufenden Nummern, oder gibt es da sowas wie einen Zeitstempel ?
Als erstes wird nach dem Datum sortiert und anschließend nach der Nummer am ende des Dateinamens aufsteigend zum Datum. Gruß Volker
|
frostschutz
Anmeldungsdatum: 18. November 2010
Beiträge: 7651
|
Hört rename beim ersten Fehler auf oder macht es weiter? Ich kann das gerade nicht ausprobieren, weil ich hier das /andere/ rename habe... Wenn es weitermacht könntest du einfach mehrmals aufrufen. rename 's/IMG-(\d{4})(\d{2})(\d{2}).*/$1-$2-$3 - WhatsApp Bild 001.jpg/' IMG-*.jpg
rename 's/IMG-(\d{4})(\d{2})(\d{2}).*/$1-$2-$3 - WhatsApp Bild 002.jpg/' IMG-*.jpg
rename 's/IMG-(\d{4})(\d{2})(\d{2}).*/$1-$2-$3 - WhatsApp Bild 003.jpg/' IMG-*.jpg
rename 's/IMG-(\d{4})(\d{2})(\d{2}).*/$1-$2-$3 - WhatsApp Bild 004.jpg/' IMG-*.jpg
rename 's/IMG-(\d{4})(\d{2})(\d{2}).*/$1-$2-$3 - WhatsApp Bild 005.jpg/' IMG-*.jpg Wenn du 100 Bilder an einem Tag hast macht es natürlich keinen Spass mehr. Dann eben noch eine Schleife drum herum. Wenn dir das 001 002 003 nicht so wichtig ist könntest du auch einfach die Whatsapp Nummer mit übernehmen. Einfach nochmal ein \d{4} und $4 hinzu (wenn du die ersten drei hinbekommen hast dann sicher auch das vierte). Ein ganz anderer Ansatz wäre dann noch, exif Daten (Datum=Datum, Kamera=WhatsApp) zu setzen und dann doch wieder mit exiftool/.../gthumb die Umbenennung durchzuführen.
|
track
Anmeldungsdatum: 26. Juni 2008
Beiträge: 7174
Wohnort: Wolfen (S-A)
|
Ok, also ist das 1. Kriterium das Datei-Datum auf Deinem Rechner ? - das kriegst Du mit rename nicht hin, sondern brauchst dafür stat . (oder wie hast Du das bisher gemacht ?) Und dann eine for - Schleife zum abklappern der Dateien ... Ja, und dann nochmal meine Frage von oben: reicht es denn dann nicht, wenn Du die WA-Nummern einfach nur beibehältst ? Oder möchtest Du die Zahlen komplett aus der Uhrzeit der Datei erzeugen ? - das könnte man ja dann auch mit stat bewerkstelligen. Oder welcher Schritt fehlt Dir jetzt noch zu Deinem Glück Skript ? - Sonst zeig doch einfach mal dein Skript, so wie es jetzt ist ! LG, track
|
VolkerRaschek
(Themenstarter)
Anmeldungsdatum: 19. August 2014
Beiträge: 358
Wohnort: Eifel
|
track schrieb: Ja, und dann nochmal meine Frage von oben: reicht es denn dann nicht, wenn Du die WA-Nummern einfach nur beibehältst ?
Oder möchtest Du die Zahlen komplett aus der Uhrzeit der Datei erzeugen ? - das könnte man ja dann auch mit stat bewerkstelligen.
Nein, die Uhrzeit spielt für mich keine Rolle. Ich möchte einfach das die Bilder durch nummeriert werden. Möglichst chronologisch. Darunter verstehe ich dass die Index Nummerierung neu erstellt wird. Angenommen ich habe folgende Bilder mit Dateinamen IMG-20160924-WA0016.jpg
IMG-20161002-WA0004.jpg
IMG-20161002-WA0008.jpg
IMG-20161003-WA0010.jpg
IMG-20161003-WA0011.jpg
IMG-20161007-WA0001.jpg Dann wende ich folgenden Befehl an. (Ergänzt durch interne WhatsApp Nummerierung).
rename 's/IMG-(\d{4})(\d{2})(\d{2})-WA(\d{4}).*/$1-$2-$3 - WhatsApp Bild $4.jpg/' *.jpg Anschließend erhalte ich folgende Dateinamen. IMG-20160924-WA0016.jpg -> 2016-09-24 - WhatsApp Bild 0016.jpg
IMG-20161002-WA0004.jpg -> 2016-10-02 - WhatsApp Bild 0004.jpg
IMG-20161002-WA0008.jpg -> 2016-10-02 - WhatsApp Bild 0008.jpg
IMG-20161003-WA0010.jpg -> 2016-10-03 - WhatsApp Bild 0010.jpg
IMG-20161003-WA0011.jpg -> 2016-10-03 - WhatsApp Bild 0011.jpg
IMG-20161003-WA0018.jpg -> 2016-10-03 - WhatsApp Bild 0018.jpg
IMG-20161005-WA0004.jpg -> 2016-10-05 - WhatsApp Bild 0004.jpg Sofern es möglich ist diese chronologisch durch zu nummerieren dann sollten die Dateinamen wie folgt aussehen.
IMG-20160924-WA0016.jpg -> 2016-09-24 - WhatsApp Bild 000.jpg
IMG-20161002-WA0004.jpg -> 2016-10-02 - WhatsApp Bild 000.jpg
IMG-20161002-WA0008.jpg -> 2016-10-02 - WhatsApp Bild 001.jpg
IMG-20161003-WA0010.jpg -> 2016-10-03 - WhatsApp Bild 000.jpg
IMG-20161003-WA0011.jpg -> 2016-10-03 - WhatsApp Bild 001.jpg
IMG-20161003-WA0018.jpg -> 2016-10-03 - WhatsApp Bild 002.jpg
IMG-20161005-WA0004.jpg -> 2016-10-05 - WhatsApp Bild 000.jpg Gruß
Volker
|
schusch
Anmeldungsdatum: 2. September 2008
Beiträge: 324
Wohnort: Berlin
|
Wenn die Dateien alle in einem Verzeichnis stehen könntest du dir mit dem awk die mv-Befehle ausgeben lassen. Mach dir ein Skript das z.B neueNamen.sh heißt 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 | #!/bin/bash
ls IMG*.jpg | sort | awk -F '.' '
BEGIN {
lfdNummer=0
altesDatum="0000-00-00"
quoteChar="'"'"'"
}
{
# Datum ist dann datum[2]
split($1, datum, "-")
# Datum im Format yyyy-mm-dd
datumAusgabe=sprintf("%s-%s-%s", substr(datum[2],1,4), substr(datum[2],5,2), substr(datum[2],7,2))
# War das letzte Bild mit gleichem Datum
if (altesDatum==datumAusgabe) {
# ja, Imkrement lfdNummer
lfdNummer++
} else {
# nein, lfdNummer auf 0 zurücksetzen
altesDatum=datumAusgabe
lfdNummer=0
}
# mv Befehl ausgeben
printf("mv %s %s%s WhatsApp Bild %03d.jpg%s\n", $0, quoteChar, datumAusgabe, lfdNummer, quoteChar)
}'
|
Dieses Skript gibt erstmal nur die entsprechenden Befehle aus. Mit
kannst du die mv Befehle ausführen lassen. Fallstricke: 1. Nicht getestet, beware of Tippfehler 😬 . Bitte neueNamen.sh aufrufen, ob die mv-Befehle korrekt ausgegeben werden. 2. Geht nur, wenn die Dateien in einem Verzeichnis stehen. 3. Wenn du das Skript aufgerufen hast und es kommt noch ein Bild mit einem Tagesdatum, das es schon gibt, wird es nicht funktionieren. Aber wenn du erstmal alles umbenannt hast könntest du die Zeile durch | ls IMG-$(date -d yesterday +%Y%m%d)*.jpg | ...
|
ersetzen, und das Skript dann täglich einmal aufrufen (z.B mit cron). LG schusch
|
VolkerRaschek
(Themenstarter)
Anmeldungsdatum: 19. August 2014
Beiträge: 358
Wohnort: Eifel
|
volker@volker-pc ~/Schreibtisch/WhatsApp-Test $ ls -la
insgesamt 800
drwxr-xr-x 2 volker volker 4096 Okt 26 11:22 .
drwxr-xr-x 3 volker volker 4096 Okt 26 11:24 ..
-rw-r--r-- 1 volker volker 171410 Okt 23 17:42 IMG-20161022-WA0009.jpg
-rw-r--r-- 1 volker volker 317749 Okt 23 17:43 IMG-20161022-WA0010.jpg
-rw-r--r-- 1 volker volker 315330 Okt 23 17:41 IMG-20161022-WA0021.jpg
-rwxr-xr-x 1 volker volker 796 Okt 26 11:22 test.sh
volker@volker-pc ~/Schreibtisch/WhatsApp-Test $ ./test.sh
mv IMG-20161022-WA0009.jpg '2016-10-22 WhatsApp Bild 000.jpg'
mv IMG-20161022-WA0010.jpg '2016-10-22 WhatsApp Bild 001.jpg'
mv IMG-20161022-WA0021.jpg '2016-10-22 WhatsApp Bild 002.jpg'
volker@volker-pc ~/Schreibtisch/WhatsApp-Test $ Das hat wunderbar funktioniert, vielen lieben Dank! 👍 Ich versuche gerade den Code mal zu verstehen, doch meine awk Kenntnisse sind schon sehr eingerostet. Gruß Volker
|