Datei automatisch per Shell vom FTP Server herunterladen

matthias321

Mitglied
Thread Starter
Dabei seit
12.08.2014
Beiträge
23
Reaktionspunkte
0
Hallo zusammen,
ich möchte einen täglich aktualisierte Lagerbestandsdatei von unserem Lieferanten per FTP Server
automatisch per Shell Befehle herunterladen. Bei zwei Lieferanten habe ich dieses bereits erfolgreich programmiert.
Nur bei einem bekomme ich es nicht hin.
Hier der SH Datei die ich erstellt habe:

Code:
#!/bin/sh
while true
do
        /usr/bin/curl ftp://user:390+trdh%264G!R@edi.beispiel.de/upload/bestand/Bestand.txt -o /Users/Downloads/Bestand.txt
        /bin/sleep 2160
done

Hier bekomme ich folgende Fehlermeldung:
curl: (67) Access denied: 530

Ich gehe davon aus, das er Probleme mit den Sonderzeichen +,%;! im Passwort hat.

Hat vielleicht jemand eine Idee, wie ich dieses umgehen kann?
Vielen Dank schon einmal für eure Hilfe.
Grüße
 
Mit richtiger URL Zeichenkodierung?
% leitet da ja den Hex Wert eines Zeichen ein.
Für % müsstest du also %25 schreiben, für + %2b und für ! halt %21.
 
  • Gefällt mir
Reaktionen: matthias321
super, das war es. Vielen Dank für deine Hilfe!!

Schöne Grüße
 
Mit richtiger URL Zeichenkodierung?
% leitet da ja den Hex Wert eines Zeichen ein.
Für % müsstest du also %25 schreiben, für + %2b und für ! halt %21.
jetzt haben ich nochmal eine Frage :)
Wie müsste ich den Code umstellen damit nicht nur eine Datei heruntergeladen wird sondern der ganz Ordner?

Schöne Grüße
 
ist es denn mit cURL möglich immer nur die aktuell Datei herunterzuladen.
Der Hintergrund ist dieser, ich bekomme von unseren Lieferanten täglich eine neue Datei mit den Lieferavis übermittelt.
Ich brauch somit eigentlich immer nur die aktuellste Datei aus dem Ordner.
Ist das vielleicht möglich?
 
Dazu müsstest du ja das Verzeichnis laden und die neueste raus filtern.
Oder hat die das Datum mit im Namen?
 
Genau so hatte ich es eigentlich vor, aber ich komme irgendwie damit nicht weiter, da ich
es immer nur mit einer Datei hinbekomme aber nicht mit einem ganzen Ordner. (bin leider kein Experte in Scripts schreiben)

Leider hat die Datei kein Datum mit im Namen.
 
Das Problem ist doch schon tausende Male gelöst worden:
https://superuser.com/questions/58300/latest-file-from-ftp-server-using-wget-or-some-other-way
https://unix.stackexchange.com/questions/192452/ftp-get-the-latest-file-in-sever


Mit wget ist es einfacher, also installier das oder guck dir die einzeilige curl lösung an, aber das musst du eventuell noch anpassen und wenn deine Shell Kenntnisse nicht so gut sind.
du meinst ich muss die folgende Zeile verwenden
Code:
curl 'ftp://server.de/dir/'$(curl 'ftp://server.de/dir/' 2>/dev/null | tail -1 | awk '{print $(NF)}')

Somit müsste mein Code so aussehen?
Code:
#!/bin/sh
echo
        
    curl'ftp://user:390%2btrdh%25264G%21R@edi.beispiel.de/upload/lieferavis/'$(curl 'ftp://user:390%2btrdh%25264G%21R@edi.beispiel.de/upload/lieferavis/' 2>/dev/null | tail -1 | awk '{print $(NF)}')" -o /Users//Downloads/Lieferavis/

echo

Sorry, aber ich bin nicht so Fit in dieser Geschichte.
 
Bei -o kannst glaube ich kein reines Verzeichnis angebenen als Ziel.

-O braucht so was nicht, sondern nimmt den Namen aus dem Link.
Das cd kannst auch im Script machen.
 
Bei -o kannst glaube ich kein reines Verzeichnis angebenen als Ziel.

-O braucht so was nicht, sondern nimmt den Namen aus dem Link.
Das cd kannst auch im Script machen.
was meinst du damit genau?
Bekomme folgende Fehlermeldung:
Lieferavis.sh: line 4: unexpected EOF while looking for matching `"'

Lieferavis.sh: line 7: syntax error: unexpected end of file
 
Nein, da fehlt vorne ein Leerzeichen und was macht das einzelne " da?
 
Nein, da fehlt vorne ein Leerzeichen und was macht das einzelne " da?
ok habe dieses nun geändert. Es scheint nun als ob wir etwas weiter gekommen ist.

Code:
#!/bin/sh
echo
        
    curl'ftp://user:390%2btrdh%25264G%21R@edi.beispiel.de/upload/lieferavis/'$(curl 'ftp://user:390%2btrdh%25264G%21R@beispiel.de/upload/lieferavis/' 2>/dev/null | tail -1 | awk '{print $(NF)}') cd /Users/Downloads

echo

nun bekomme ich folgende Fehlermeldung:
Code:
Lieferavis.sh: line 4: curlftp://user:390%2btrdh%25264G%21R@beispiel.de.de/upload/lieferavis/RBP_077_DESADV_0001408287_Kaufmann.ido_.txt: No such file or directory

wobei die Endung der Fehlermeldung RBP_077_DESADV_0001408287_ aus einem Dateinamen aus dem zu kopierenden Ordner bereits stammt. :unsure:
 
Da fehlt immer noch das Leerzeichen zwischen curl und dem '
Das cd gehört nicht dahinter, das wäre ein Befehl vor dem curl im Script und das -O hast auch nicht eingebaut.
curl -O '
 
oh sorry, habe es nun geändert und bekomme folgende Meldung:

% Total % Received % Xferd Average Speed Time Time Time Current


Dload Upload Total Spent Left Speed


0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0Warning: Failed to create the file /Users/Downloads: Is a


Warning: directory


100 67 100 67 0 0 181 0 --:--:-- --:--:-- --:--:-- 184


curl: (23) Failure writing output to destination
 
habe allerdings anstatt dem cd wie -o verwendet da ansonsten diese Fehlermeldung kam

K;"30439 ";00340433957926408155;PK;0080614048

P;10;731156;4;

curl: (6) Could not resolve host: cd

curl: (3) URL using bad/illegal format or missing URL
 
Anscheinend machst du jede Menge Syntax und Pfad Fehler.
 
  • Gefällt mir
Reaktionen: dg2rbf
Code:
cd /User/name/Downloads
curl -O 'ftp://user:390%2btrdh%25264G%21R@edi.beispiel.de/upload/lieferavis/'"$(curl 'ftp://user:390%2btrdh%25264G%21R@beispiel.de/upload/lieferavis/' 2>/dev/null | tail -1 | awk '{print $(NF)}')"
 
Zurück
Oben Unten