Як завантажити один файл за допомогою FTP з командного рядка?


114

Мені потрібно завантажити один файл на FTP-сервер від Ubuntu. Цю операцію слід робити в сценарії (в неінтерактивному режимі). Для чого потрібний синтаксис ftp?

Я намагаюся це зробити безрезультатно:

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

5
Як мені створити сторінку?
Ігнасіо Васкес-Абрамс

Я мало знаю про ftpінструмент в Ubuntu, але схоже, що він задихається ftp://. спробуйте вийняти це, можливо?
Нейт Коппенгавер

@ IgnacioVazquez-Abrams man ftpв командному рядку
c.gutierrez

Аналогічно: Синхронізація файлів через FTP , але для декількох файлів.
kenorb

Я отримую "-невідомий варіант".
Роберт Рейз

Відповіді:


181

Ось один підхід:

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

Крім того, створіть (або відредагуйте) файл ~ / .netrc у домашньому режимі користувача, який виконає команду ftp, надайте йому відповідні perms ( chmod 0600 ~/.netrc) та додайте наступне:

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

Потім опустіть інформацію про вхід, як у:

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

Також ось, як ви можете зробити те ж саме, використовуючи curl:

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

12
Нічого собі, я не знав, що curlпідтримує ftp! Це дуже зручно.
Себастьян

61
+1 для curlрішення. Навіщо навіть турбуватися з іншим?
Асаф

3
@Asaph, тому що curl не встановлений там, де мені це потрібно зробити, тому інше рішення було корисним. Дякую.
bobef

1
+1 для завитка. Акуратно, чисто і прямо до справи! У Debian / Ubuntu "apt-get install curl", якщо у вас його немає.
Гтодоров

2
curlрішення є найкращим і найлегшим

17

Я можу порекомендувати ftp-upload. Це акуратний маленький інструмент, який ви можете встановити під ubuntu через sudo apt-get install ftp-upload.

Приклад використання:

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

Чи можете ви надати посилання на інструмент або його документацію?
bwDraco

1
Привіт DragonLord, якщо ви перебуваєте в Ubuntu і у вас встановлений ftp-upload (використовуючи команду, яку я дав раніше), ви можете просто зробити man ftp-upload. Сподіваюся, що це допомагає.
Флоріс

5

Вам потрібно виправити URL-адресу, вказану у вашій заяві. Ви отримали помилку, оскільки URL-адреса була неповною - у ній не було назви об’єкта, який ви завантажуєте. Після того, як ви додасте ім'я файлу після 'example.com', як я зробив нижче, ви побачите, що одна команда дійсно працює так, як ви задумали.

Спробуйте це:

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


9
ftp: недійсний варіант - 'u'
Бабкен Варданян

2
Справді :( ftp: u: невідомий варіант
webDEVILopers

ftp: u: невідомий варіант
Morten

4

Встановіть ncftp та використовуйте інструмент ncftpput , який поставляється разом із ним, майже щось подібне до цього синтаксису:

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

Ви навіть можете перевірити, чи стан завантаження хороший чи поганий. Звичайний ftp-клієнт також може бути використаний разом з очікуванням.



2

Завантажте файл у віддалене місце за допомогою командного рядка

#!/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

Для цього я використовую BusyBox ftpput:

# /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

Примітка: busybox ftpgetтеж добре працюйте.


0

Ви також можете використовувати команду sftp або ftp

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


0

я покращив відповідь Марті, як показано нижче (включте двійковий):

[ftp_example_1.sh]

$ ftp_example_sh.sh dump_file

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 dump_file

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.