【发布时间】:2017-03-21 17:19:20
【问题描述】:
我已经编写了一个 shell 脚本来将远程文件通过 ftp 传输到本地服务器。但它给了我错误。 脚本:
#!/bin/sh
cd /home/local-path
HOST='hostname'
USER='username'
PASSWD='password'
ftp -n -v $HOST << EOT
binary
user $USER $PASSWD
cd /home/server-path
theFile=$(ls -t | head -n 1)
get $theFile
bye
EOT
运行时出现以下错误:
Connected to server.
220 (vsFTPd 2.0.5)
530 Please login with USER and PASS.
331 Please specify the password.
230 Login successful.
250 Directory successfully changed.
?Invalid command
(remote-file) (local-file)
221 Goodbye.
如果我硬编码完整的文件路径而不是 cd /home/server-path & theFile=$(ls -t | head -n 1),它可以工作美好的。问题是我不知道确切的远程文件名,因为有多个文件,我只需要 ftp 最新的一个。
能否请您检查一下并告诉我我在这里犯了什么错误,谢谢。
【问题讨论】:
-
theFile=$(ls -t | head -n 1)不是有效的 FTP 语法。那是bash语法,完全不同。最简单的解决方案可能是建立两个连接 - 一个运行ls -t,以便您可以解析会话的输出,第二个实际获取您解析出的文件。或者,您可以将 FTP 作为协同进程运行,但这更加复杂和脆弱,并且难以正确处理...... -
ls -t 不是有效的 ftp 命令。您可以通过此链接stackoverflow.com/questions/28835893/…参考答案