Dateien mit dem Erstelldatum umbenennen (Konsole)
Dateien mit dem Erstelldatum umbenennen (Konsole)
Moin zusammen, ich habe folgende Aufgabenstellung:
In einem Verzeichnis werde unregelmäßig Dateien mit einem kryptischen Namen gespeichert.
Beispiel: "livestream77352100_1632645427968.mp4", "snapshot77352100_1632645427818.jpg". Diese möchte ich mit dem Datum und der Zeit der Erstellung/Modifikation umbenennen und dann per SMB Share ( kann auch per NFS erfolgen) auf einen entfernten Server kopieren.
Falls der rename so nicht geht, müssten die Dateien sofort wenn diese gespeichert werden mit dem aktuellen Datum und Uhrzeit umbenannt werden und direkt auf den Share kopiert und danach gelöscht werden.
Reicht dazu ein Bash-Script ? Wie könnte das realisiert werden ?
In einem Verzeichnis werde unregelmäßig Dateien mit einem kryptischen Namen gespeichert.
Beispiel: "livestream77352100_1632645427968.mp4", "snapshot77352100_1632645427818.jpg". Diese möchte ich mit dem Datum und der Zeit der Erstellung/Modifikation umbenennen und dann per SMB Share ( kann auch per NFS erfolgen) auf einen entfernten Server kopieren.
Falls der rename so nicht geht, müssten die Dateien sofort wenn diese gespeichert werden mit dem aktuellen Datum und Uhrzeit umbenannt werden und direkt auf den Share kopiert und danach gelöscht werden.
Reicht dazu ein Bash-Script ? Wie könnte das realisiert werden ?
Re: Dateien mit dem Erstelldatum umbenennen (Konsole)
Bist du sicher, dass "kryptischername" nicht vielleicht schon bereits Datum und Uhrzeit enhält?
1632645427818 sieht nämlich fast wie nen Unixtimestamp aus:
1632661080 wäre ungefähr jetzt
Schau mal ob, das auf Deine anderen Dateien auch passt, dann würd ich vorschlagen, den Teil des Dateinamens zu nehmen und umzuwandeln.
1632645427818 sieht nämlich fast wie nen Unixtimestamp aus:
1632661080 wäre ungefähr jetzt
Code: Alles auswählen
date && date +%s
Re: Dateien mit dem Erstelldatum umbenennen (Konsole)
tja, das könnte vielleicht sein. Wie kann man das denn ich ein "lesbares" Datum umwandeln und renamen ? Wenn ich das so auf ein SMB Share kopiere, kann ich nicht erkennen welche Datei von welchem Datum / Zeit ist.
Ich werde gerade noch einmal aktuelle Dateien Erstellen und paste dann die Filenamen
so von gerade
livestream77352100_1632661644762.mp4
snapshot77352100_1632661654050.jpg
livestream77352100_1632661734542.mp4
snapshot77352100_1632661734504.jpg
snapshot77352100_1632661644687.jpg
snapshot77352100_1632661734583.jpg
ok die letzten 3 Stellen sind ungültig
date -d @1632661644
So 26. Sep 15:07:24 CEST 2021
date -d @1632661654
So 26. Sep 15:07:34 CEST 2021
Aber sonst stimmt es.
Ich werde gerade noch einmal aktuelle Dateien Erstellen und paste dann die Filenamen
so von gerade
livestream77352100_1632661644762.mp4
snapshot77352100_1632661654050.jpg
livestream77352100_1632661734542.mp4
snapshot77352100_1632661734504.jpg
snapshot77352100_1632661644687.jpg
snapshot77352100_1632661734583.jpg
ok die letzten 3 Stellen sind ungültig
date -d @1632661644
So 26. Sep 15:07:24 CEST 2021
date -d @1632661654
So 26. Sep 15:07:34 CEST 2021
Aber sonst stimmt es.
Re: Dateien mit dem Erstelldatum umbenennen (Konsole)
for i in *.jpg; do mv "$i" "${i: -17}"; done
for i in *.jpg; do mv $i ${i:0:10}.jpg; done
for i in *.mp4; do mv "$i" "${i: -19}"; done
for i in *.mp4; do mv $i ${i:0:10}.mp4; done
so bekomme ich schon mal die Filenamen in sekunden
Aber wie jetzt in ein lesbares Datum im Filenamen setzen ?
date -d@1632661734 +%H-%M-%S_%F
das ergibt: 15-08-54_2021-09-26
wie binde ich das jetzt in den rename ein ?
for i in *.jpg; do mv $i ${i:0:10}.jpg; done
for i in *.mp4; do mv "$i" "${i: -19}"; done
for i in *.mp4; do mv $i ${i:0:10}.mp4; done
so bekomme ich schon mal die Filenamen in sekunden
Aber wie jetzt in ein lesbares Datum im Filenamen setzen ?
date -d@1632661734 +%H-%M-%S_%F
das ergibt: 15-08-54_2021-09-26
wie binde ich das jetzt in den rename ein ?
Re: Dateien mit dem Erstelldatum umbenennen (Konsole)
Wie bzw von was werden die Dateien erzeugt. Eventuell ist das ganze Gedoehns mit dem Umbenennen unnoetig, wenn die Dateien schon mit dem "richtigen" Namen erzeugt werden.
Ansonsten kannst du deine Dateien <sekunden>.<ext> folgendermassen umbenennen (ungetestet):
Ansonsten kannst du deine Dateien <sekunden>.<ext> folgendermassen umbenennen (ungetestet):
Code: Alles auswählen
for datei in *.(jpg|mp4); do
mv "${datei} "$(date -d@${datei%.*} +%F-%H:%M-%S).${datei#*.}"
done
Re: Dateien mit dem Erstelldatum umbenennen (Konsole)
erstmal danke rodney, dass du dich dem Problem annimmst !
Die Dateien werden von einem Adapter im iobroker erzeugt und da kann ich nur diesen Output nutzen.
In dem von Dir vorgeschlagenen Befehl fehlt m.E. noch ein ;
Aber auch
das überfordert meine rudimentären bash Kenntnisse
Die Dateien werden von einem Adapter im iobroker erzeugt und da kann ich nur diesen Output nutzen.
In dem von Dir vorgeschlagenen Befehl fehlt m.E. noch ein ;
Aber auch
Code: Alles auswählen
for datei in *.(jpg|mp4); do
mv "${datei} "$(date -d@${datei%.*} +%F-%H:%M-%S).${datei#*.}"[b][color=#FF0000];[/color][/b]
done
Code: Alles auswählen
bringt den Fehler:
-bash: Syntaxfehler beim unerwarteten Wort `('
mv "${datei} "$(date -d@${datei%.*} +%F-%H:%M-%S).${datei#*.}"
> done
Zuletzt geändert von HAL2010 am 26.09.2021 18:54:50, insgesamt 1-mal geändert.
Re: Dateien mit dem Erstelldatum umbenennen (Konsole)
Sorry. War wohl nicht bash-kompatibel. Sollte funktionieren:
P.S. Es waere toll wenn du Codebloecke/Schnipsel fuer bessere Lesbarkeit netter formatieren wuerdest (4. Icon von links "</>")
Code: Alles auswählen
for datei in *.jpg *.mp4; do...
Re: Dateien mit dem Erstelldatum umbenennen (Konsole)
@rodney
Ich habe jetzt mal alle möglichen Kombinationen ausprobiert, aber es gelingt mir nicht innerhalb mv den date Befehl zu übergeben. Hast Du noch eine Idee ?
Ich habe jetzt mal alle möglichen Kombinationen ausprobiert, aber es gelingt mir nicht innerhalb mv den date Befehl zu übergeben. Hast Du noch eine Idee ?
Re: Dateien mit dem Erstelldatum umbenennen (Konsole)
Code: Alles auswählen
$ echo $0
bash
$ touch 1632661734.jpg
$ ls
1632661734.jpg
$ datei="1632661734.jpg"
$ echo "${datei}"
1632661734.jpg
$ echo "$(date -d@${datei%.*} +%F-%H:%M-%S).${datei#*.}"
2021-09-26-15:08-54.jpg
$ cp "${datei}" "$(date -d@${datei%.*} +%F-%H:%M-%S).${datei#*.}"
$ ls
1632661734.jpg 2021-09-26-15:08-54.jpg
(gelöst) Dateien mit dem Erstelldatum umbenennen (Konsole)
super Danke jetzt hat es so geklappt:
jetzt muss ich das ganze nur noch zeitgesteuert auf meinen Share kopieren. Wenn ich dazu doch noch Hilfe benötige würde ich mich noch einmal melden
@rodney DANKE !
Code: Alles auswählen
for datei in *.jpg; do mv "${datei}" "$(date -d@${datei%.*} +%F-%H:%M-%S).${datei#*.}"; done
for datei in *.mp4; do mv "${datei}" "$(date -d@${datei%.*} +%F-%H:%M-%S).${datei#*.}"; done
@rodney DANKE !
Re: Dateien mit dem Erstelldatum umbenennen (Konsole)
So scheint alles zu klappen. Täglich werden die Dateien umbenannt, und auf einen samba server verschoben. Sobald Dateien älter als 28 Tage sind, werden die auf dem Samba Share gelöscht. Danke für die Hilfe !