Jak przesłać jeden plik przez FTP z wiersza poleceń?


114

Muszę przesłać pojedynczy plik na serwer FTP z Ubuntu. Operację tę należy wykonać w skrypcie (w trybie nieinteraktywnym). Jaka jest właściwa składnia ftp?

Próbuję tego, ale bezskutecznie:

$ ftp -u ftp://user:secret@ftp.example.com my-local-file.txt
ftp: Invalid URL `ftp://'

5
Jak mam strony man?
Ignacio Vazquez-Abrams

Nie wiem dużo o ftpnarzędziu w Ubuntu, ale wygląda na to, że dusi się ftp://. może spróbować to wyjąć?
Nate Koppenhaver,

@ IgnacioVazquez-Abrams man ftpw wierszu poleceń
c.gutierrez

Podobne: Synchronizacja plików przez FTP , ale dla wielu plików.
kenorb

Dostaję „-u nieznana opcja”.
Robert Reiz,

Odpowiedzi:


181

Oto jedno podejście:

$ ftp -n <<EOF
open ftp.example.com
user user secret
put my-local-file.txt
EOF

Alternatywnie, utwórz (lub edytuj) plik ~ / .netrc w katalogu głównym użytkownika, który uruchomi polecenie ftp, nadaj mu odpowiednią perms ( chmod 0600 ~/.netrc) i dodaj:

# ~/.netrc
machine ftp.example.com
login user
password secret

Następnie pomiń dane logowania, jak w:

$ echo put my-local-file.txt | ftp ftp.example.com

Oto, jak możesz zrobić to samo za pomocą curl:

$ curl -T my-local-file.txt ftp://ftp.example.com --user user:secret

12
Wow, nie wiedziałem curlobsługiwane ftp! To bardzo przydatne.
Sébastien

61
+1 za curlrozwiązanie. Po co w ogóle zawracać sobie głowę drugim?
Asaph

3
@Asaph, ponieważ curl nie jest zainstalowany tam, gdzie muszę to zrobić, więc przydało się inne rozwiązanie. Dzięki.
bobef

1
+1 za zwijanie. Schludnie, czysto i od razu do rzeczy! W Debianie / Ubuntu „apt-get install curl”, jeśli go nie masz.
GTodorov,

2
curlrozwiązanie jest najlepszy i najłatwiejszy

17

Mogę polecić ftp-upload. To fajne małe narzędzie, które można zainstalować pod Ubuntu sudo apt-get install ftp-upload.

Przykład użycia:

ftp-upload -h {HOST} -u {USERNAME} --password {PASSWORD} -d {SERVER_DIRECTORY} {FILE_TO_UPLOAD}

Czy możesz podać link do narzędzia lub jego dokumentacji?
bwDraco

1
Cześć DragonLord, jeśli jesteś w Ubuntu i zainstalowałeś ftp-upload (używając polecenia, które wcześniej wydałem), możesz to zrobić man ftp-upload. Mam nadzieję, że to pomaga.
Floris,

5

Musisz naprawić adres URL podany w wyciągu. Wystąpił błąd, ponieważ adres URL był niekompletny - brakowało nazwy przesyłanego obiektu. Po dodaniu nazwy pliku po „example.com”, jak to zrobiłem poniżej, zobaczysz, że pojedyncze polecenie rzeczywiście działa tak, jak zamierzałeś.

Spróbuj tego:

ftp -u ftp://user:secret@ftp.example.com/my-local-file.txt my-local-file.txt


9
ftp: nieprawidłowa opcja - 'u'
Babken Vardanyan

2
Rzeczywiście :( ftp: u: nieznana opcja
webDEVILopers

ftp: u: nieznana opcja
Morten

4

Zainstaluj ncftp i skorzystaj z dołączonego do niego narzędzia ncftpput , podobnie jak ta składnia:

ncftpput -u ftpuser -p ftppass ftphostname /path/where/to/upload localfile.name
if [ $? -ne 0 ]; then echo "Upload failed"; fi

Możesz nawet sprawdzić, czy status przesyłania jest dobry czy zły. Zwykły klient ftp może być również używany wraz z funkcją expect.



2

Prześlij plik do zdalnej lokalizacji za pomocą wiersza polecenia

#!/bin/bash
#$1 is the file name
#usage:this_script <filename>
HOST='yourhost'
USER="youruser"
PASSWD="pass"
FILE="abc.php"
REMOTEPATH='/html'

ftp -n $HOST <<END_SCRIPT
quote USER $USER
quote PASS $PASSWD
cd $REMOTEPATH
put $FILE 
quit
END_SCRIPT
exit 0

1

Korzystam z BusyBox, ftpputaby to zrobić:

# /bin/busybox ftpput

BusyBox v1.20.2 (Debian 1:1.20.0-7) multi-call binary.

Usage: ftpput [OPTIONS] HOST [REMOTE_FILE] LOCAL_FILE

Upload a file to a FTP server

    -v,--verbose            Verbose
    -u,--username USER      Username
    -p,--password PASS      Password
    -P,--port NUM           Port

Uwaga: busybox ftpgetdziała również dobrze.


0

Możesz także użyć polecenia sftp lub ftp

sftp {user}@{IP}
Password:
put {path To File On Local Computer}


0

poprawiłem odpowiedź Marty'ego jak poniżej (w tym binarną):

[ftp_example_1.sh]

$ ftp_example_sh.sh plik zrzutu

ftp -n <<EOF
open 192.168.0.10
user anonymous aaa
binary
put $1
EOF

[ftp_example_2.sh]

$ ftp_example_2.sh 192.168.0.10 plik zrzutu

ftp -n <<EOF
open $1
user anonymous aaa
binary
put $2
EOF

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.