【问题标题】:ftp latest file from remote to localftp最新文件从远程到本地
【发布时间】: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/…参考答案

标签: shell unix scripting ftp


【解决方案1】:

我使用的 FTP 只支持几个命令。所以基本上你可以使用get 命令将文件从FTP 放到你的目录中。最好把远程目录下的所有文件都放到本地,然后在本地使用ls -t | head -n1获取最新的文件。

代码如下:

!/bin/bash
path=/some/path

export path
echo   "-----------Downloading the file from SFTP Location----------------"

cd "$path"
sftp -b /dev/stdin user@host <<CMDS
cd [remote-directory path]
pwd
get allfilenames local-directory
bye
CMDS
cd "$path"
ls -t | head -n1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-17
    • 1970-01-01
    • 1970-01-01
    • 2016-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多