ubuntuusers.de

ftp upload script

Status: Gelöst | Ubuntu-Version: Kubuntu 6.10 (Edgy Eft)
Antworten |

nico_steppat

Anmeldungsdatum:
9. Oktober 2005

Beiträge: 16

Wohnort: São Paulo

Hallo alle zusammen,

Ich möchte gerne ein ftp upload script schreiben, da ich alle zwei Zwochen eine Reihe von zips files auf den upload.sf.net Server senden muss.

Da Antwort (so dachte ich) steht in einem Artikel hier http://www.linux-user.de/ausgabe/2006/02/081-ftp/.

Das folgende Script funktioniert:

#!/bin/bash
ftp -i -v <<EOCMDS
open upoad.sf.net
ascii
cd incoming
put file.zip
quit
EOCMDS

Ich habe einen Eintrag in .netrc:
machine upload.sf.net login anonymous password blah

Wenn ich allerding die Anweisungen in eine for Schleife oder function lege, bekomme ich eine Syntax Fehlermeldung, z.B.:

#!/bin/bash
list="file.zip file2.zip"
for file in ${list}; do
ftp -i -v <<EOCMDS
open upoad.sf.net
ascii
put $file
quit
EOCMDS
done

Ich google schon eine ganze Weile herum mit immer dem gleichen Ergebnis.

Vielen Dank,
Nico

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17622

Wohnort: Berlin

#!/bin/bash
list="file.zip file2.zip"
for file in ${list}; do
  ftp -i -v <<EOCMDS
    open upoad.sf.net
    ascii
    put $file 
    quit
  EOCMDS
done


Ob das quit dahingehend stört, daß die Bash meint, das done würde nie erreicht?
Wieso eigentlich nicht:

#!/bin/bash
list="file.zip file2.zip"
ftp -i -v <<EOCMDS
open upoad.sf.net
ascii
for file in ${list}; do
        put $file 
done
quit
EOCMDS


btw: Code-Tags mit dem Gartenzaun-Symbol # erzeugen.

nico_steppat

(Themenstarter)

Anmeldungsdatum:
9. Oktober 2005

Beiträge: 16

Wohnort: São Paulo

Das geht leider auch nicht:

#!/bin/bash
list="file.zip file2.zip"
 ftp -i -v upload.sf.net<<EOCMDS
   ascii
      for file in ${list}; do
        put $file
      done
  quit
 EOCMDS 

Ich erhalte nach der erfolgreichen Verbindung zum ftp Server ein "?Invalid command". Soweit wie ich das verstehe, wird das "for" wohl auf dem ftp Server ausgeführt, der dieses Kommando nicht kennt.

Irgendeine Idee?

Vielen Dank für die Hilfe,
Nico

Maduser

Avatar von Maduser

Anmeldungsdatum:
3. Mai 2005

Beiträge: 1238

Mein Vorschlag wäre:

#!/bin/bash
ftp -i -v <<EOCMDS
open upoad.sf.net
ascii
cd incoming
mput file1.zip file2.zip
quit
EOCMDS


Aber warum wird da ascii ausgeführt zip-Dateien sind doch binar?

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17622

Wohnort: Berlin

nico_steppat hat geschrieben:

Das geht leider auch nicht:
Soweit wie ich das verstehe, wird das "for" wohl auf dem ftp Server ausgeführt,...

- logisch.

Ich springe auf den mput-Zug auf, und rufe 'binary!'

hackepeter

Avatar von hackepeter

Anmeldungsdatum:
8. Januar 2006

Beiträge: 185

Wohnort: München

user unknown hat geschrieben:

nico_steppat hat geschrieben:

Das geht leider auch nicht:
Soweit wie ich das verstehe, wird das "for" wohl auf dem ftp Server ausgeführt,...

- logisch.

Ich springe auf den mput-Zug auf, und rufe 'binary!'

Vielleicht ist das eine Lösungsmöglichkeit:
http://www.python.org/doc/current/lib/module-ftplib.html

Habe das aber selber noch nicht verwendet.

Gruß HP

flammi

Anmeldungsdatum:
30. Juli 2006

Beiträge: 92

Wohnort: Bassum

Wie wäre es einfach wput an der stelle von ftp zu verwenden?

zakmccrac

Anmeldungsdatum:
16. Januar 2007

Beiträge: 52

Wohnort: Lüneburg

Hallo,

ich würde es mittels ncftpput realisieren.
"ncftp" liegt im Universe-Zweig wenn ich mich nicht täusche.

#!/bin/sh

# ----------------
LOCALDIR=/home/user/ftp/
FTPUSER=USERNAME
FTPPASS=PASSWORD
HOST=IPADRESS
REMOTEDIR=DIR/TO/PUT/FILES/
# ----------------

for J in ${LOCALDIR}*
do
  if ncftpput -R -m -u ${FTPUSER} -p ${FTPPASS} -m  ${HOST} ${REMOTEDIR} ${LOCALDIR}$J
  then
     rm $J
  fi
done

Ob das nun so syntaktisch 100% ist kann ich nicht sagen, aber vielleicht hilft es

Gruss
Zak

Logander4

Avatar von Logander4

Anmeldungsdatum:
12. November 2009

Beiträge: 156

also uplaod da gucke ich mal aber hier hast du schonmal was: (In Python-Code)

1
2
3
4
5
6
7
8

from ftplib import FTP
ftp = 'ftp.beispiel.de')
ftp.login('user','passwd')
ftp.retrlines('LIST') #Listet  alle enthaltenden Elemente auf!
ftp.cwd('beispielverzeichniss') #Wechselt zum  angegebenen Verzeichnis

ftp.quit()

So das mit dem uploaden geht laut Python-Hilfe so:

1
2
3
4
#download:
ftp.retrlines('RETR', + filename) #Frag mich nicht was die wollen
#upload:
ftp.storlines()

Musste mal selber im Python-Forum nachgucken! Mehr kann ich nicht helfen!

ftpbeispiel.py (233 Bytes)
Download ftpbeispiel.py

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17622

Wohnort: Berlin

Du weißt schon, daß Du in einem fast 3 Jahre alten Thread antwortest?

Don't wake the zombies!

Antworten |