2011-08-15 01:40:11 +0000 2011-08-15 01:40:11 +0000
117
117

如何从命令行通过FTP上传一个文件?

我需要从Ubuntu上传一个文件到FTP服务器。这个操作应该用脚本(非交互模式)来完成。ftp的正确语法是什么?

我正在尝试这样做,没有结果:

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

答案 (10)

188
188
188
2011-08-15 04:39:47 +0000

这里有一个方法:

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

或者,在用户的主目录中创建(或编辑)~/. netrc文件,给它适当的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
18
18
18
2015-01-27 15:52:13 +0000

我可以推荐ftp-upload。这是一个很好的小工具,你可以通过sudo apt-get install ftp-upload在ubuntu下安装。

使用实例:

ftp-upload -h {HOST} -u {USERNAME} --password {PASSWORD} -d {SERVER_DIRECTORY} {FILE_TO_UPLOAD}
5
5
5
2011-12-02 19:59:23 +0000

你需要修复你的语句中给出的URL。你收到这个错误是因为URL不完整–它缺少你要上传的对象的名字。一旦你把文件名添加到'examplex.com'后面,就像我在下面所做的那样,你会发现单条命令确实按照你的意图运行。

4
4
4
2013-01-10 09:06:56 +0000

你也可以试试lftp

这里有一个例子:

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

这里有一个例子,请参考这里 更多详情

4
4
4
2011-08-15 04:37:46 +0000

安装ncftp,然后使用ncftpput工具,差不多是这样的语法:

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

你甚至可以检查上传状态是好是坏。一般的ftp客户端也可以和expect一起使用。

2
2
2
2015-04-29 07:48:35 +0000

通过命令行

#!/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
1
1
2015-02-16 17:47:05 +0000

我用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
0
0
2015-02-16 19:37:53 +0000

你也可以使用 sftp 或 ftp 命令

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

0
0
0
2017-07-31 02:59:52 +0000

我改进了Marty的答案如下(包括二进制):

$ftp

-1
-1
-1
2017-08-25 18:06:21 +0000
FtpPut(){
    echo `echo -e "open host\nuser user pass\nbinary\nput $1\nquit"|ftp -nv`
}
FtpPut asd.txt
FtpPut asd.mp4
FtpPut asd.php
...