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


114

我需要将单个文件从Ubuntu上传到FTP服务器。此操作应在脚本中完成(在非交互模式下)。正确的语法是ftp什么?

我正在尝试,但无济于事:

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

5
我该如何手册页?
伊格纳西奥·巴斯克斯

我对ftpUbuntu中的工具了解不多,但是看起来对它来说令人窒息ftp://。尝试把它拿出来吗?
Nate Koppenhaver

@ IgnacioVazquez-Abrams man ftp在命令行
c.gutierrez

相似:通过FTP同步文件,但用于多个文件。
kenorb 2015年

我收到“ -u未知选项”。
罗伯特·雷兹

Answers:


182

这是一种方法:

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

或者,在将运行ftp命令的用户的主目录中创建(或编辑)〜/ .netrc文件,为其指定适当的权限(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!超级好用。
2013年

61
+1为curl解决方案。为什么还要打扰另一个人呢?
Asaph 2013年

3
@Asaph因为没有在我需要这样做的地方安装curl,所以其他解决方案派上了用场。谢谢。
bobef 2014年

1
+1为卷曲。整洁,干净,直接!在Debian / Ubuntu中,“ apt-get install curl”(如果没有)。
GTodorov'3

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。希望能有所帮助。
弗洛里斯(Floris)

5

您需要修复语句中给定的URL。您收到错误消息是因为URL不完整-它缺少您要上传的对象的名称。按照我在下面的步骤在“ example.com”之后添加文件名后,您将看到单个命令确实按预期工作。

尝试这个:

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


9
FTP:无效选项- 'U'
Babken瓦尔达尼扬

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客户端也可以与Expect一起使用。


3

您也可以尝试lftp

这是一个例子:

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

这里指的更多的细节


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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.