Как загрузить один файл по FTP из командной строки?

115

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

Я пытаюсь это безрезультатно:

$ ftp -u ftp://user:secret@ftp.example.com my-local-file.txt
ftp: Invalid URL `ftp://'
yegor256
источник
5
Как мне справочную страницу?
Игнасио Васкес-Абрамс
Я не знаю много об ftpинструменте в Ubuntu, но похоже, что он задыхается ftp://. попробуйте вытащить это возможно?
Нейт Коппенхавер
@ IgnacioVazquez-Abrams man ftpв командной строке
c.gutierrez
Аналогично: синхронизация файлов по FTP , но для нескольких файлов.
Кенорб
Я получаю «-у неизвестный вариант».
Роберт Рейз

Ответы:

182

Вот один из подходов:

$ 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
Marty
источник
12
Вау, я не знал, curlподдерживает ли ftp! Это супер удобно.
Себастьян
62
+1 за curlрешение. Зачем вообще возиться с другим?
Асаф
3
@Asaph, потому что curl не установлен там, где мне нужно это сделать, поэтому другое решение пригодилось. Благодарю.
Бобеф
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}
Floris
источник
Можете ли вы предоставить ссылку на инструмент или его документацию?
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: неизвестный вариант
Мортен
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работать тоже хорошо.

Naskel
источник
0

Вы также можете использовать команду sftp или ftp

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

iProgram
источник
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
sailfish009
источник
-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
...
Йёнчу Билишим Чозюмлери
источник