我需要从 Ubuntu 上传单个文件到 FTP 服务器。此操作应在脚本中完成(非交互模式)。正确的语法是什么ftp
?
我正在尝试这个,但没有成功:
$ ftp -u ftp://user:[email protected] my-local-file.txt
ftp: Invalid URL `ftp://'
答案1
以下是一种方法:
$ 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 -T my-local-file.txt ftp://ftp.example.com --user user:secret
答案2
我可以推荐ftp-upload
。这是一个简洁的小工具,您可以通过在 ubuntu 下安装sudo apt-get install ftp-upload
。
使用示例:
ftp-upload -h {HOST} -u {USERNAME} --password {PASSWORD} -d {SERVER_DIRECTORY} {FILE_TO_UPLOAD}
答案3
您需要修复语句中给出的 URL。您收到错误是因为 URL 不完整 - 它缺少您要上传的对象的名称。一旦您在“example.com”后添加文件名(如我下面所做的那样),您就会看到单个命令确实按您的预期工作。
尝试这个:
ftp -u ftp://user:[email protected]/my-local-file.txt my-local-file.txt
答案4
安装 ncftp 并使用ncfpput命令随之而来的工具,几乎类似于以下语法:
ncftpput -u ftpuser -p ftppass ftphostname /path/where/to/upload localfile.name
if [ $? -ne 0 ]; then echo "Upload failed"; fi
您甚至可以检查上传状态是好是坏。普通的 ftp 客户端也可以与 expect 一起使用。