Ordnerinhalt ohne Bashscript via ftp-Verbindung löschen möglich ?

Begonnen von TomLee, 10 Januar 2022, 14:53:23

Vorheriges Thema - Nächstes Thema

TomLee

Hallo,

mich hat das gestern Stunden beschäftigt auf diese Lösung zu kommen einen Ordnerinhalt über eine ftp-Verbindung zu löschen:

#!/bin/bash
HOST=192.168.188.1
USER=bli
PASSWORD=bla

ftp -inv $HOST <<EOF
user $USER $PASSWORD
mdelete /Intenso-RainbowLine-00/FRITZ/faxbox/*
    bye
EOF


Es gäb noch mit curl und lftp die Möglichkeit es anzugehen, wird aber dann unnötig kompliziert und länger, mein ich verstanden zu haben.
ftp und lftp müsste ich bei OS auch erstmal nachinstallieren.

Ich hab mit der Bash nur wenig Erfahrung, kann wer dazu was sagen und vlt. eine Variante aufzeigen die ohne Script auskommt, die einfach über einen Systemaufruf in FHEM möglich wäre ?

Gruß

Thomas


Wernieman

Einen kompletten (gefüllten) ftp-Ordner kannst Du über ftp nicht löschen, da dieses im Protokoll nicht vorgesehen ist und deshalb von den (meisten) ftp-Clients auch nicht durchgeführt wird.
- 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

ZitatEinen kompletten (gefüllten) ftp-Ordner kannst Du über ftp nicht löschen

Versteh ich nicht ganz, das brauch /will ich ja gar nicht, einen gefüllten Ordner löschen, wie gezeigt nur den Inhalt.

/Intenso-RainbowLine-00/FRITZ/faxbox/ beinhaltet beliebig viele Dateien, die lösche ich alle mit dem oben gezeigten Script, nur die versteckten bleiben erhalten. Ich könnte den Ordner noch löschen nachdem ich ihn geleert habe, darum gehts mir ja aber nicht.

Ich wollte gerne wissen ob es die Möglichkeit gibt das ganze ohne Script auszuführen, über FHEM, meinetwegen mit irgendeinem anderen Befehl wie ftp.

TomLee

Vlt. nochmal anders weil ich mit der Bash ja nicht so bewandert bin und ich nicht ausschliessen möchte das ich es nur noch nicht richtig verstanden.

Mein Verständnis bis jetzt ist das es nur über das Script geht, ich kann nicht in der Shell irgendwie den Befehl eingeben, also auch nicht über Fhem, weil so klappts nicht wegen dem EOF geh ich davon aus, sry ist halt für mich Neuland.

ftp -inv 192.168.188.1 <<EOF user bli bla mdelete /Intenso-RainbowLine-00/FRITZ/faxbox/* bye EOF

Wernieman

Ahhhh... jetzt verstehe ich Dich.

Das "normale" ftp kann auf der "Konsole" direkt keine Befehle entgegennehmen. Was Du mit <<< machst, ist eine Eingabenumleitung. So etwas kann, meines Wissens, direkt FHEM nicht. Die Eingabemaske von FHEM hat nichts mit bash etc. zu tuhen.

ftp kennt aber die Angabe einer "Befehlsdatei", Stichwort -s, siehe z.B. https://ss64.com/bash/ftp.html

Allerdings würde ich die Ausführung solcher Befehle immer in eine eigens Script auslagern, welches ich mit "" Starte. Hat den Vorteil, das es "nonblocking" geht.

Hinweis: Willst Du wirklich ftp verwenden? Wird mittelfristig verschwinden .....
- 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

Zitatftp kennt aber die Angabe einer "Befehlsdatei", Stichwort -s, siehe z.B. https://ss64.com/bash/ftp.html

Danke, bleibt im Hinterkopf.

ZitatAllerdings würde ich die Ausführung solcher Befehle immer in eine eigens Script auslagern,

Danke, sowas wollt ich zum Verständnis hören.

ZitatHinweis: Willst Du wirklich ftp verwenden? Wird mittelfristig verschwinden .....

Keine ... schickt heute mehr ein Fax, nur Werbung. Ich werd das was ich mir gerade bastle sehr wsl. nie verwenden, das hätt ich vor 20 Jahren gebraucht, ich baus mir aber trotzdem, weil ichs schon immer haben wollte  ;D und auch Spass macht umzusetzen / zu sehen wie sich Fragen klären die man sich immer gestellt hat wie man was wie umsetzen kann (unabhängig von FHEM jetzt).


Otto123

Hi,

noch zur Erklärung, das hier ist ein HEREDOC
ftp -inv $HOST <<EOF
user $USER $PASSWORD
mdelete /Intenso-RainbowLine-00/FRITZ/faxbox/*
    bye
EOF
zwischen EOF und EOF wird ALLES so wie es ist (mit Zeilenumbruch) per << in die FTP Verbindung geschickt. Das geht mMn (wie schon gesagt) nur wirklich richtig mit der shell und einem Script. Ich sehe auch noch das Problem der Zeit, ich weiß nicht was passiert wenn die ftp Verbindung kurz versauert :)
Die FB kann doch auch SMB, binde das Laufwerk doch darüber an und mounte es bei Bedarf und lösch dann. Das wäre aus meiner Sicht einfacher und ginge wahrscheinlich wirklich aus der Befehlszeile:
"mount /mnt/Fritzbox;rm /mnt/Fritzbox/faxbox/*;umount /mnt/Fritzbox"

Gruß Otto
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 ich weiß jetzt (seit gestern  8)) das es auch über Samba geht, Samba hab ich auf meinem jetzigen System auch installiert (da ist aber irgendwie was im Hinterkopf bei der nächsten Neuinstallation zu versuchen darauf zu verzichten).

Aber ja, du hast schon recht mit einfacher, ich mach mich später, morgen mal da ran. Danke.

Otto123

Nein, Du brauchst kein samba, bei den meisten Systemen brauchst Du nichts installieren. Lies mal meinen Link die ersten Sätze :)
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

Wernieman

Wie Otto schrieb: Windows-Mounts mounten kann der Linux Kernel ohne Samba ...
- 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

Houston, ich hab ein weiteres Problem.

Warum wird die Datei jetzt nicht gefunden, muss ich den Pfad anders angeben ?
Ich mach zum Test ein set im Device selbst:
set tb_TelegramBot sendDocument /mnt/FRITZNAS/fax.pdf
und bekomme diese Meldung:
2022.01.11 16:34:32 3: TelegramBot_SendIt tb_TelegramBot: Failed with :FAILED file :/mnt/FRITZNAS/fax.pdf: not found or empty:
2022.01.11 16:34:32 3: TelegramBot_Callback tb_TelegramBot: resulted in NonBlockingGet: returned FAILED file :/mnt/FRITZNAS/fax.pdf: not found or empty from SendIt

fhem@FHEMPIOS:~$ ls -l /mnt/FRITZNAS
insgesamt 16
-rwxr-xr-x 1 fhem dialout 11303 Jan 11 15:20 fax.pdf

Zum Zeitpunkt des Befehl absetzen ist der Pfad 100% gemounted.


Am Ende hab ich das vor:

#!/bin/bash

mount /mnt/FRITZNAS;
mv /mnt/FRITZNAS/[0-9]*_[0-9]*_Telefax\.[0-9]*.pdf /mnt/FRITZNAS/fax.pdf;
perl fhem.pl 7072 "set tb_TelegramBot sendDocument /mnt/FRITZNAS/fax.pdf";
rm /mnt/FRITZNAS/*;
umount /mnt/FRITZNAS;


edit:

wenn ich zur Kontrolle die Datei nach /opt/fhem kopiere will ( weil dort klappt das senden mit sendDocument), gibts diese Meldung:

... kann nicht zum Lesen geöffnet werden: Veraltete Dateizugriffsnummer (file handle)

das kann man umgehen wenn man in der fstab (nach Ottos Anleitung) noserverino ergänzt.

Als workaround klappt dann das senden des Dokument wenn man die Datei nach /opt/fhem kopiert:

mount /mnt/FRITZNAS;
mv /mnt/FRITZNAS/[0-9]*_[0-9]*_Telefax\.[0-9]*.pdf /mnt/FRITZNAS/fax.pdf;
cp /mnt/FRITZNAS/fax.pdf /opt/fhem/fax.pdf;
perl fhem.pl 7072 "set tb_TelegramBot sendDocument /mnt/FRITZNAS/fax.pdf";
rm /mnt/FRITZNAS/*;
umount /mnt/FRITZNAS;


Ich würd aber gerne gleich aus dem gemounteden Pfad senden, jetzt müsste ich noch die Datei in /opt/fhem noch löschen.


Wernieman

- 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

Ich hab gerade editiert  :P

ZitatUnd was sind die Rechte des Ordners?

fhem@FHEMPIOS:~$ ls -lhad /mnt/FRITZNAS
drwxr-xr-x 2 fhem dialout 0 Jan 11 18:25 /mnt/FRITZNAS

Wernieman

- 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

//192.168.188.1/FRITZ.NAS/Intenso-RainbowLine-00/FRITZ/faxbox /mnt/FRITZNAS cifs noauto,users,noserverino,user=bli,password=bla