[ geloest ] rename einer Datei (nicht: Device) in FHEM ?

Begonnen von Ralph, 24 Dezember 2020, 14:32:29

Vorheriges Thema - Nächstes Thema

Ralph

Moin allerseits,
ich möchte eine Datei mit FHEM-Methoden renamen unter Verwendung der Variablen %Y %m %d

Beispiel: täglich um 23:59 rename ./log/dateiname.log ./log/dateiname-%Y-%m-%d.log

(Es gibt Gründe, warum so und nicht gleich mit den Variablen anlegen, ich weiß, das wäre am einfachsten)

Mit {sytem ....} habe ich ja die Variablen nicht.

Hat bitte jemand eine Idee für mich ?
FHEM auf RaspberryPi3 mit Geekworm USV und SignalDUINO 433MHz und HM-MOD-RPI-PCB mit 3 HM-Sec-SD-2, 5 FHT, 2 RM 100-2 Uni S, 2 HMS100, 6 CUL_WS, 6 CUL_FHTTK, 11 FS20 und 7 FS20V Spannungsüberwachungen

Wernieman

Soeweit ich weiß, geht es nicht direkt mit FHEM. Aber als Stichwort, "perl ebene"
https://perldoc.perl.org/functions/rename
https://perlmaven.com/how-to-remove-copy-or-rename-a-file-with-perl

Beispielcode kann ich Dir jetzt nicht geben ....
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Wzut

zwei Zeilen bash Script > datum.sh

NAME="$(date --rfc-3339=date)"
cp test.txt test-$NAME.txt

mit chmod +x ausführbar machen
mit qx oder sytem aufrufen kopiert die Datei test.txt auf test-2020-12-24.txt
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Wernieman

Er möchte rename, also anstatt cp (copy) ein mv (move) nehmen ...
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

TomLee

#4
Habs bestimmt falsch verstanden und das mit dem bash-Script nicht ausprobiert.

Reicht nicht einfach ein :

{system("mv /log/dateiname.* /log/dateiname-$year-$month-$mday.log")}

?

Ralph

Danke Euch allen und Frohes Fest.

Natürlich reicht auch TomLee's Idee, nur das Wissen um $year-$month-$mday fehlte mir. Wald und Bäume, wie ich immer sage.

Das mit dem bash ist mir vollkommen fremd, werde ich aber nach den feiertagen ausprobieren, interessiert mich.

Danke nochmals.
FHEM auf RaspberryPi3 mit Geekworm USV und SignalDUINO 433MHz und HM-MOD-RPI-PCB mit 3 HM-Sec-SD-2, 5 FHT, 2 RM 100-2 Uni S, 2 HMS100, 6 CUL_WS, 6 CUL_FHTTK, 11 FS20 und 7 FS20V Spannungsüberwachungen

Otto123

Hi,

zum🎄 Feiertag gibts Nachschlag, die Nonblocking Variante: ;) Shell Befehl in FHEM
"mv ./log/dateiname.log ./log/dateiname-$(date '+%Y-%m-%d').log"
https://fhem.de/commandref_DE.html#command

Schöne Weihnachten
Otto

P.S. TomLee's Variante hat einen kleinen Fehler ./log/... vs /log/...
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

TomLee

Und wie nutzt man das dann in einem AT ?

Weil

Zitat"mv ./log/dateiname.* ./log/dateiname-$(date '+%Y-%m-%d').log"

klappt nicht.

Otto123

#8
Die klassische Frage: was steht im Log?  8)

Mein Test - alles in der FHEM Kommandozeile!
{qx(ls -lha ./log/dateiname*.*)}
"touch ./log/dateiname.log"
define a5 at +00:00:10 "mv ./log/dateiname.* ./log/dateiname-$(date '+%Y-%m-%d').log"
10 sec warten
{qx(ls -lha ./log/dateiname*.*)}

Hat bei mir funktioniert - was der * da für einen Sinn macht steht auf einem anderen Blatt. ;)

Tipp: für wiederholende Tests besser %Y-%m-%d-%H-%M-%S verwenden ;)
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

TomLee

Ja, OK das klappt mit einer Datei im Ordner ./log/...

Ich teste aber mit einer Datei im fhem-Ordner und bin zu doof den Pfad richtig anzugeben  ::):

{qx(ls -lha ./yowsum*.*)}
{qx(ls -lha /yowsum*.*)}
{qx(ls -lha yowsum*.*)}


Klappt alles nicht.

pi@FHEMPIOS:/opt/fhem $ ls -l
insgesamt 1040
...
drwxr-xr-x  5 fhem dialout   4096 Jun 28  2019 yowsum-2020-12-25.logw
....

Otto123

#10
weil Deine Datei in Wahrheit ein Verzeichnis ist :)

Noch zu Deinen Variationen:
./yowsum ist die Datei im aktuellen Pfad (relativ angegeben) - mW wichtig um Dateien direkt zu starten die ausführbar sind (z.B. Scripte)
/yowsum ist die Datei in der Wurzel des Dateisystems (absolut angegeben)
yowsum wäre auch die Datei im aktuellen Pfad (relativ angegeben) - funktioniert um Dateien zu lesen und zu schreiben

~/ wäre das User HomeDir
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

TomLee


Wernieman

Und sei bitte vorsichtig mit *.
Das deklariert alles, übrigens inklusive dem ".". Deshalb ist auch "*.*" ein Dos/Windows Deklaration, die in Unix eigentlich nicht sinnvoll ist.
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html