Как загрузить один файл по FTP из командной строки?
Мне нужно загрузить один файл на FTP-сервер из Ubuntu. Эта операция должна быть выполнена в сценарии (в неинтерактивном режиме). Какой правильный синтаксис для ftp
?
Я пытаюсь это безрезультатно:
$ ftp -u ftp://user:secret@ftp.example.com my-local-file.txt
ftp: Invalid URL `ftp://'
12 ответов
Вот один из подходов:
$ ftp -n <<EOF
open ftp.example.com
user user secret
put my-local-file.txt
EOF
В качестве альтернативы, создайте (или отредактируйте) файл ~/.netrc в домашнем каталоге пользователя, который запустит команду ftp, передайте ему соответствующие разрешения (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
Я могу порекомендовать ftp-upload
, Это аккуратный маленький инструмент, который вы можете установить под Ubuntu через sudo apt-get install ftp-upload
,
Пример использования:
ftp-upload -h {HOST} -u {USERNAME} --password {PASSWORD} -d {SERVER_DIRECTORY} {FILE_TO_UPLOAD}
Вы также можете попробовать lftp
,
Вот пример:
lftp -e 'cd folder1/folder2; put /home/path/yourfile.tar; bye' -u user,password ftp.theserver.com
Обратитесь сюда для более подробной информации
,
Вам необходимо исправить URL, указанный в вашем заявлении. Вы получили сообщение об ошибке, поскольку URL-адрес был неполным - в нем отсутствовало имя загружаемого объекта. Когда вы добавите имя файла после "example.com", как я это сделал ниже, вы увидите, что одна команда действительно работает так, как вы и планировали.
Попробуй это:
ftp -u ftp://user:secret@ftp.example.com/my-local-file.txt my-local-file.txt
Установите ncftp и используйте инструмент ncftpput, который поставляется вместе с ним, примерно такой синтаксис:
ncftpput -u ftpuser -p ftppass ftphostname /path/where/to/upload localfile.name
if [ $? -ne 0 ]; then echo "Upload failed"; fi
Вы даже можете проверить, является ли статус загрузки хорошим или плохим. Нормальный клиент ftp также может использоваться вместе с ожидаемым.
Загрузить файл в удаленное место через командную строку
#!/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
Я использую BusyBox's 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
работать тоже хорошо.
Использоватьput
команда после подключения к FTP-серверу с помощьюftp
(кстати, он интерактивный).
put local-file [remote-file]
Store a local file on the remote machine. If remote-file is left unspecified, the local file name is used after processing according to any ntrans or nmap settings in
naming the remote file. File transfer uses the current settings for type, format, mode, and structure.
Пример входа:
~ $ ftp 127.0.0.1
Connected to 127.0.0.1.
220---------- Welcome to Pure-FTPd [privsep] ----------
220-You are user number 1 of 25 allowed.
220-Local time is now 10:47. Server port: 21.
220-This is a private system - No anonymous login
220-IPv6 connections are also welcome on this server.
220 You will be disconnected after 15 minutes of inactivity.
Name (127.0.0.1:user1): user2
331 User user2 OK. Password required
Password:
230 OK. Current restricted directory is /
Remote system type is UNIX.
Using binary mode to transfer files.
Пример копии (перед этим требуется логин):
ftp> put index.html
local: index.html remote: index.html
200 PORT command successful
150 Connecting to port 43791
226-File successfully transferred
226 0.003 seconds (measured here), 3.96 Mbytes per second
10701 bytes sent in 0.00 secs (34.4773 MB/s)
Пример выхода из системы (перед этим необходим вход в систему)
ftp> quit
221-Goodbye. You uploaded 11 and downloaded 0 kbytes.
221 Logout.
~ $
Я улучшил ответ Марти, как показано ниже (включая бинарный файл):
[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
Вы также можете использовать команду sftp или ftp
sftp {user}@{IP}
Password:
put {path To File On Local Computer}
С завитком:
curl -T $file -u "$user:$pass" ftp://xxxxx.xxx[:$port]/server/path [--ftp-ssl] [-k]
Между фигурными скобками являются необязательными
FtpPut(){
echo `echo -e "open host\nuser user pass\nbinary\nput $1\nquit"|ftp -nv`
}
FtpPut asd.txt
FtpPut asd.mp4
FtpPut asd.php
...