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:[email protected] my-local-file.txt
ftp: Invalid URL `ftp://'
yegor256
źródło
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
Marty
źródło
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}
Floris
źródło
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:[email protected]/my-local-file.txt my-local-file.txt

Paweł
źródło
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.

OG
źródło
3

Możesz także spróbować lftp.

Oto przykład:

lftp -e 'cd folder1/folder2; put /home/path/yourfile.tar; bye' -u user,password ftp.theserver.com

Patrz tutaj dla więcej szczegółów

.

divinedragon
źródło
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
Shal
źródło
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.

Naskel
źródło
0

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

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

iProgram
źródło
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
sailfish009
źródło
-1
FtpPut(){
    echo `echo -e "open host\nuser user pass\nbinary\nput $1\nquit"|ftp -nv`
}
FtpPut asd.txt
FtpPut asd.mp4
FtpPut asd.php
...
Yöncü Bilişim Çözümleri
źródło