117
117
如何从命令行通过FTP上传一个文件?
我需要从Ubuntu上传一个文件到FTP服务器。这个操作应该用脚本(非交互模式)来完成。ftp
的正确语法是什么?
我正在尝试这样做,没有结果:
$ ftp -u ftp://user:secret@ftp.example.com my-local-file.txt
ftp: Invalid URL `ftp://'
这里有一个方法:
$ 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
你也可以试试lftp
。
这里有一个例子:
lftp -e 'cd folder1/folder2; put /home/path/yourfile.tar; bye' -u user,password ftp.theserver.com
这里有一个例子,请参考这里 更多详情
。
通过命令行
#!/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的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
也很好用。
我改进了Marty的答案如下(包括二进制):
$ftp
FtpPut(){
echo `echo -e "open host\nuser user pass\nbinary\nput $1\nquit"|ftp -nv`
}
FtpPut asd.txt
FtpPut asd.mp4
FtpPut asd.php
...