Dateien mit dem Erstelldatum umbenennen (Konsole)

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
HAL2010
Beiträge: 7
Registriert: 26.09.2021 14:11:11

Dateien mit dem Erstelldatum umbenennen (Konsole)

Beitrag von HAL2010 » 26.09.2021 14:23:29

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 ?

eggy
Beiträge: 3331
Registriert: 10.05.2008 11:23:50

Re: Dateien mit dem Erstelldatum umbenennen (Konsole)

Beitrag von eggy » 26.09.2021 15:02:21

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

Code: Alles auswählen

date && date +%s
Schau mal ob, das auf Deine anderen Dateien auch passt, dann würd ich vorschlagen, den Teil des Dateinamens zu nehmen und umzuwandeln.

HAL2010
Beiträge: 7
Registriert: 26.09.2021 14:11:11

Re: Dateien mit dem Erstelldatum umbenennen (Konsole)

Beitrag von HAL2010 » 26.09.2021 15:06:13

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.

HAL2010
Beiträge: 7
Registriert: 26.09.2021 14:11:11

Re: Dateien mit dem Erstelldatum umbenennen (Konsole)

Beitrag von HAL2010 » 26.09.2021 15:27:58

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 ?

rodney
Beiträge: 332
Registriert: 09.12.2016 04:15:59

Re: Dateien mit dem Erstelldatum umbenennen (Konsole)

Beitrag von rodney » 26.09.2021 16:16:18

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):

Code: Alles auswählen

for datei in *.(jpg|mp4); do
	mv "${datei} "$(date -d@${datei%.*} +%F-%H:%M-%S).${datei#*.}"
done

HAL2010
Beiträge: 7
Registriert: 26.09.2021 14:11:11

Re: Dateien mit dem Erstelldatum umbenennen (Konsole)

Beitrag von HAL2010 » 26.09.2021 16:47:24

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

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
das überfordert meine rudimentären bash Kenntnisse
Zuletzt geändert von HAL2010 am 26.09.2021 18:54:50, insgesamt 1-mal geändert.

rodney
Beiträge: 332
Registriert: 09.12.2016 04:15:59

Re: Dateien mit dem Erstelldatum umbenennen (Konsole)

Beitrag von rodney » 26.09.2021 17:48:19

Sorry. War wohl nicht bash-kompatibel. Sollte funktionieren:

Code: Alles auswählen

for datei in *.jpg *.mp4; do...
P.S. Es waere toll wenn du Codebloecke/Schnipsel fuer bessere Lesbarkeit netter formatieren wuerdest (4. Icon von links "</>")

HAL2010
Beiträge: 7
Registriert: 26.09.2021 14:11:11

Re: Dateien mit dem Erstelldatum umbenennen (Konsole)

Beitrag von HAL2010 » 27.09.2021 16:14:18

@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 ?

rodney
Beiträge: 332
Registriert: 09.12.2016 04:15:59

Re: Dateien mit dem Erstelldatum umbenennen (Konsole)

Beitrag von rodney » 27.09.2021 16:25:52

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
Funktioniert hier in der bash (GNU bash, version 5.0.3)

HAL2010
Beiträge: 7
Registriert: 26.09.2021 14:11:11

(gelöst) Dateien mit dem Erstelldatum umbenennen (Konsole)

Beitrag von HAL2010 » 27.09.2021 16:53:42

super Danke jetzt hat es so geklappt:

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
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 !

HAL2010
Beiträge: 7
Registriert: 26.09.2021 14:11:11

Re: Dateien mit dem Erstelldatum umbenennen (Konsole)

Beitrag von HAL2010 » 27.09.2021 17:50:02

:D 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 !

Antworten