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 ?
Soeweit ich weiß, geht es nicht direkt mit FHEM. Aber als Stichwort, "perl ebene"
https://perldoc.perl.org/functions/rename (https://perldoc.perl.org/functions/rename)
https://perlmaven.com/how-to-remove-copy-or-rename-a-file-with-perl (https://perlmaven.com/how-to-remove-copy-or-rename-a-file-with-perl)
Beispielcode kann ich Dir jetzt nicht geben ....
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
Er möchte rename, also anstatt cp (copy) ein mv (move) nehmen ...
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")}
?
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.
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/...
Und wie nutzt man das dann in einem AT ?
Weil
Zitat"mv ./log/dateiname.* ./log/dateiname-$(date '+%Y-%m-%d').log"
klappt nicht.
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 ;)
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
....
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
Alles gut. Danke.
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.