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

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

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


评论

如何设置页面?

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

@ IgnacioVazquez-Abrams命令行中的man ftp

类似:通过FTP同步文件,但用于多个文件。

我收到“ -u未知选项”。

#1 楼

这是一种方法:或者,在用户的主目录中创建(或编辑)〜/ .netrc文件,该文件将运行ftp命令,给它适当的权限(chmod 0600 ~/.netrc),然后添加以下内容:

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


然后省略登录信息,如:

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



此外,这也是使用curl进行相同操作的方法:

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


评论


哇,我不知道curl支持ftp!超级好用。

–塞巴斯蒂安
2013年6月25日在16:25



+1为卷曲解决方案。为什么还要打扰另一个人呢?

– Asaph
13-10-9在20:55

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

– bobef
2014年9月11日上午8:12

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

–GTodorov
16 Mar 6 '16 at 18:57

卷发解决方案是最好和最简单的

–user512278
16 Mar 28 '16 at 16:40

#2 楼

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

使用示例:

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


评论


您可以提供该工具或其文档的链接吗?

–bwDraco
15年1月27日在16:11

嗨,DragonLord,如果您在Ubuntu中,并且已经安装了ftp-upload(使用我之前给出的命令),则可以手动进行ftp-upload。希望能有所帮助。

–花
15年2月3日在18:01

#3 楼

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

请尝试以下操作:

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

评论


ftp:无效选项-'u'

–巴本·瓦尔达扬(Babken Vardanyan)
2014年8月1日在17:06

确实:( ftp:u:未知选项

– webDEVILopers
2014年10月28日上午10:24

ftp:u:未知选项

– Morten
18年11月8日在11:45

#4 楼

您也可以尝试lftp

这里是一个示例:

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


请参阅此处以获取更多详细信息



评论


要以非Unix名称使用它,我发现了这一点:NN =“'non unix.file'”; lftp -e“ cd文件夹;放入$ NN;再见” -u匿名,ftp.theserver.com

–schweik
20 Jan 17'8:22



#5 楼

安装ncftp并使用其随附的ncftpput工具,类似于以下语法:

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


您甚至可以检查上传状态是好是坏。
普通的ftp客户端也可以与Expect一起使用。

#6 楼

通过命令行将文件上传到远程位置

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


#7 楼

我使用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也能很好地工作。

#8 楼

我改进了马蒂的答案,如下所示(包括二进制文件):

[ftp_example_1.sh]

$ ftp_example_sh.sh dump_file

ftp -n <<EOF
open 192.168.0.10
user anonymous aaa
binary
put 
EOF


[ftp_example_2.sh]

$ ftp_example_2.sh 192.168.0.10 dump_file

ftp -n <<EOF
open 
user anonymous aaa
binary
put 
EOF


#9 楼

您还可以使用sftp或ftp命令

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

#10 楼

FtpPut(){
    echo `echo -e "open host\nuser user pass\nbinary\nput \nquit"|ftp -nv`
}
FtpPut asd.txt
FtpPut asd.mp4
FtpPut asd.php
...