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

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

我需要从 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 一起使用。

相关内容