Download, Löschen, Umbenennen .... ein Versuch

Status
Für weitere Antworten geschlossen.

gerdk

Benutzer
Mitglied seit
24. Jan 2011
Beiträge
85
Punkte für Reaktionen
0
Punkte
0
Hallo zusammen,

nach der "Sommerpause" versuche ich mein altes Projektchen von einem Topfield PVR auf meine DS111 Aufnahmen zu kopieren, sie auf der DS umzubenennen und dann auf dem PVR zu löschen wiederzubeleben. Das Kopieren und Umbenennen klappt zwischenzeitlich. Mit meinen bescheidenen Kenntnissen und viel gegoogle, gebinge usw. habe ich folgendes Script geschrieben:

#!/bin/sh
wget --directory-prefix=/volume1/video/ ftp://user:Pw@IP/DataFiles/TEST/*.rec
ftp IP
cd /DataFiles/
RMD TEST
MKD TEST
bye
cd /volume1/video/
for i in $(find ./ -type f -name "*.rec")
do
mv "$i" "$(echo $i | awk -F.rec '{print $1}').ts"
done
echo "Kopieren erfolgreich abgeschlossen" | nail -s "Statusmeldung DS 111" Adresse

Der Zugriff per FTP funktioniert. Da mir nichts besseres eingefallen ist, habe ich beim Löschen zur Radikalversion gegriffen: Verzeichnis komplett löschen und dann wiederherstellen. Blöderweise wechselt beim FTP Zugriff das System auf den PVR und der Rest wird dann natürlich nicht mehr ausgeführt. An dieser Stelle bin ich mit meinem Latein endgültig am Ende. Hat jemand eine Idee für mich?

Vielen Dank
Gerd
 

gerdk

Benutzer
Mitglied seit
24. Jan 2011
Beiträge
85
Punkte für Reaktionen
0
Punkte
0
weitere Suchen haben ergebern, dass "ftp" den Parameter -s kennt. Er bewirkt, dass Befehle in einer Textdatei ausgeführt werden. Blöderweise kennt der per inetutils nachinstallierte ftp -Befehl diesen Parameter nicht. Kennt jemand einen Trick oder sonst eine Möglichkeit Verzeichnisse vom Host aus zu löschen?

Danke
Gerd
 

Merthos

Benutzer
Mitglied seit
01. Mai 2010
Beiträge
2.709
Punkte für Reaktionen
1
Punkte
84
Pack doch alles vor das ftp. Die Mail ist in der Form eh nicht aussagekräftig, da keinerlei Fehlerprüfung erfolgt.
 

gerdk

Benutzer
Mitglied seit
24. Jan 2011
Beiträge
85
Punkte für Reaktionen
0
Punkte
0
Hallo Merthos,

es ist mir schon klar, dass die Sache noch mangelhaft ist, aber das ist mein momentaner Wissenstand :(

Aktuelles Problem ist dieser Teil:
ftp IP
cd /DataFiles/
RMD TEST
MKD TEST

Du meinst

ftp cd /DataFiles/ RMD TEST MKD TEST IP

könnte klappen - jedenfalls werd' ich es am Abend gleich probieren.
Vielen Dank für den Tipp

Gerd
 

Merthos

Benutzer
Mitglied seit
01. Mai 2010
Beiträge
2.709
Punkte für Reaktionen
1
Punkte
84
Nee, so geht das nicht, da hatte ich die Frage falsch verstanden.


Aber ich hatte Dir doch schon mal .netrc empfohlen.

Datei "/root/.netrc" anlegen mit folgendem Inhalt:
Rich (BBCode):
machine IP login USER password PASSWORD macdef
init
cd /DataFiles/
rmdir TEST
mkdir TEST
bye
Wichtig eine Leerzeile am Ende.

Dann noch die Rechte setzen:
Rich (BBCode):
chmod 600 /root/.netrc

Den "tnftp" über ipgk installieren:
Rich (BBCode):
ipkg update
ipkg install tnftp

Und dann einfach:
Rich (BBCode):
tnftp IP
Damit wird dann alles aus der Datei abgespielt.
 

gerdk

Benutzer
Mitglied seit
24. Jan 2011
Beiträge
85
Punkte für Reaktionen
0
Punkte
0
sorry, aber diese Empfehlung hab' ich irgendwie übersehen.....
Jedenfalls Danke für die Codes! Der Abend kann kommen...

Ich berichte..

Gerd
 

gerdk

Benutzer
Mitglied seit
24. Jan 2011
Beiträge
85
Punkte für Reaktionen
0
Punkte
0
.. klappt irgendwie nicht. Ich habe deine codes genau durchgeführt. Ich komme zwar auf den PVR, aber es werden keine Befehle ausgeführt. die Fehlermeldung lautet:

Cannot read termcap database;
using dump terminal settings.

Die Datei .netrc habe ich mit der Leerzeile (der Cursor steht bei Zeile 8 - dumm ausgedrückt) und mit Unix Zeilenende gespeichert (Notepad++)

Was will mir diese Fehlermeldung genau sagen?
Hilfe
Gerd
 

Merthos

Benutzer
Mitglied seit
01. Mai 2010
Beiträge
2.709
Punkte für Reaktionen
1
Punkte
84
Die Meldung ist egal, nur "beschränkte Einstellungen" von dem Terminal. Taste Dich langsam vor, mach erst mal nur bis "cd ..." und ergänze dann schrittweise den Rest.
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Die Meldung dürfte nur eine 'Warnung' und kein Fehler sein ... also ignorieren.

Wo ich die ganze Zeit Bauchschmerzen mit habe - weil nicht ausprobiert - ist die Tatsache, dass du versuchst, ein 'gefülltes' Verzeichnis zu löschen. Da sind manche Programme (der rmdir geht dann z.B. nicht) allergisch gegen. Probiere doch mal, ob es geht, wenn das Verzeichnis TEST 'leer' ist.

Itari
 

gerdk

Benutzer
Mitglied seit
24. Jan 2011
Beiträge
85
Punkte für Reaktionen
0
Punkte
0
@Merthos: mach ich - danke

@itari: grundsätzlich teile ich deine Bedenken. Einfach ein Verzeichnis löschen ........ geht eigentlich nicht. Nachdem ich aber keine Möglichkeit gefunden habe, alle heruntergeladenen Dateien per ftp oder sonstwie zu löschen habe ich zu dieser Radikallösung gegriffen. Wenn es nur mit einem leeren Verzeichnis funktioniert, habe ich nichts gewonnen.

In jedem Fall: Danke
Gerd
 

gerdk

Benutzer
Mitglied seit
24. Jan 2011
Beiträge
85
Punkte für Reaktionen
0
Punkte
0
klappt schon beim cd /DataFiles/ nicht. Wenn ich die Befehle der Reihe nach tippe ist alles ok. Nur die Stapelverarbeitung klappt nicht. Hinkommen tu ich aber, also die .netrc scheint bis zum Login zu funktionieren... Ist sonst noch etwas zu konfigurieren,..

Gerd
 

Merthos

Benutzer
Mitglied seit
01. Mai 2010
Beiträge
2.709
Punkte für Reaktionen
1
Punkte
84
Eigentlich nicht. Mit dem Syno-FTP-Server geht das problemlos.

In welchem Verzeichnis bist Du denn dann? Teste mal ohne die /.

Ansonsten wird rmdir wie von itari vermutet nicht gehen. Dafür aber "mdelete *" in dem Ordner, wenn man den tnftp mit der Option "-i" startet:
Rich (BBCode):
tnftp -i IP
 

gerdk

Benutzer
Mitglied seit
24. Jan 2011
Beiträge
85
Punkte für Reaktionen
0
Punkte
0
das Ding macht mich fertig:

ich hab' x-Varianten der .netrc probiert. Die Einzige die funktioniert, ist die mit einem automatischen login. Sobald ich in der erstern Zeile "macdef" hinzufüge verlangt er ein manuelles login. Was danach kommt ist ihm offensichtlich total schnurz. Auch ohne "macdef". Beim Aufruf von tnftp mit dem -i Parameter bekomme ich "?Invalid command"

Nach dem login (ob manuell oder automatisch) lande ich immer in der root meines PVR. Kann es am FTP-Client liegen. Im Topfieldforum habe ich einen alternativen gefunden. Wenn alles nichts hilft muss der eben her... Was meinst du?

Danke für deine Geduld
Gerd
 

gerdk

Benutzer
Mitglied seit
24. Jan 2011
Beiträge
85
Punkte für Reaktionen
0
Punkte
0
großer Teilerfolg:

#!/bin/sh
wget --directory-prefix=/volume1/video/ ftp://User:ID@IP/DataFiles/TEST/*.rec
ftp IP <<EOF
bi
cd DataFiles
rmdir TEST
mkdir TEST
quit
EOF
cd /volume1/video/
for i in $(find ./ -type f -name "*.rec")
do
mv "$i" "$(echo $i | awk -F.rec '{print $1}').ts"
done
echo "Kopieren erfolgreich abgeschlossen" | nail -s "Statusmeldung DS 111" Mail

Damit hat es geklappt :):):):):)

Bei meiner verzweifelten Suche bin ich auf diese Zwischenlösung gestoßen. Das Löschen "voller" Verzeichnisse hat auch funktioniert. Einzig das Umbenennen zickt jetzt, aber das sehe ich mir morgen an - scheint mit den Leerzeichen in den Aufnahmename Tun zu haben. Jedenfalls freu' ich mich fürs erste. Der springende Punkt war .netrc .....

Gerd
 
Zuletzt bearbeitet:

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Rich (BBCode):
FN=$(echo "$i" | awk -F.rec '{print $1}').ts
mv "$i" "$FN"

besser, weil übersichtlicher:

Rich (BBCode):
mv "$i" "${$i%.rec}.ts"

Itari
 

gerdk

Benutzer
Mitglied seit
24. Jan 2011
Beiträge
85
Punkte für Reaktionen
0
Punkte
0
Danke für die Codes Itari. Leider mögen die mich nicht.
Beim Ersten erhalte ich folgende Fehlermeldung: mv: can't rename '':no such file or directory
Beim Zweiten: -sh: syntax error: bad substitution

Zugegeben: ich kann damit nichts anfangen. Ausgeführt habe ich die Teile via Putty direkt im Verzeichnis in dem sich die umzubenennenden Datein befinden - einfach eingetippt.

Blöderweise klappt auch das mauelle Umbenennen nicht: da sich auch Sonderzeichen wie (): in den Dateinamen befinden kann mv damit scheinbar nichts anfangen und quittiert den Dienst mit einer Fehlermeldung.
Hast du noch einen Tipp für mich?

Danke
Gerd

PS.: kannst du mir eventuell irgendeine Literatur zum Einlesen empfehlen?
 

Merthos

Benutzer
Mitglied seit
01. Mai 2010
Beiträge
2.709
Punkte für Reaktionen
1
Punkte
84
Die müssen schon in die for-Schleife rein, die Du ja schon hast. Also in Deinem Skript die Zeile nach dem "do" ersetzen.

Ansonsten ist das Shell-Programmierung mit regulären Ausdrücken, zu beiden Themen sollte eine Suchmaschine Deiner Wahl mehr als genug finden. itari hatte hier im Forum auch mal einen Workshop dazu angefangen, reicht vielleicht auch erst mal, um zu sehen, ob Du Dich damit wirklich befassen willst. ;-)

Edit:
Mit () hast Du natürlich ein sehr unschönes Sonderzeichen. Aber der awk-Variante müsste das egal sein. Für die Leerzeichen musst Du noch folgendes vor dem "for" einfügen, die trennt sonst falsch.
Rich (BBCode):
IFS="
"
 
Zuletzt bearbeitet:

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0

gerdk

Benutzer
Mitglied seit
24. Jan 2011
Beiträge
85
Punkte für Reaktionen
0
Punkte
0
Ihr verwirrt mich.....
Mein Problem sind die Sonderzeichen. Ich hab' die Sache mit "durchgehenden und sonderzeichenfreien" Dateinamen probiert -> kein Problem.

Entschuldige die dumme Frage: Wo muss ich IFS= einsetzen?

Was mich zum letzten Teil meines letzten Postings führt. Der Workshop ist super. Damit kann ich schon mal etwas anfangen. Es ist ja nicht so, dass ich noch nie etwas pogrammiert habe, nur ist dies lange her. Von der Syntax her erinnert mich das etwas an C .... lange ist's her. Aktuell brauche ich aber eine Lösung, da die Videoverteilung in den Fittnessraum in Betrieb gehen sollte (WAF!!!) -groß einlesen ist momentan nicht. Und da ich etwas konservativ bin, ist mir ein Buch neben der Tatatur lieber.

Ihr habt mir aber schon sehr viel weitergehlofen -Danke
Gerd
 

Merthos

Benutzer
Mitglied seit
01. Mai 2010
Beiträge
2.709
Punkte für Reaktionen
1
Punkte
84
Das IFS kommt in Deinem Skript aus #14 vor die for-Schleife. Wichtig sind die Gänsefüße und der Zeilenumbruch dazwischen. Eigentlich sollte dann alles mit dem Skript gehen.
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat