【问题标题】:Get the latest file from a remote server from an FTP in Unix从 Unix 中的 FTP 从远程服务器获取最新文件
【发布时间】:2015-03-03 15:44:05
【问题描述】:

我需要从 Unix 中的远程主机获取文件。我正在使用ftp 命令。问题是我需要该位置的最新文件。我就是这样做的:

dir=/home/user/nyfolders
latest_file=$(ls  *abc.123.* | tail -1)
ftp -nv <<EOF
open $hostname
user $username $password
binary
cd $dir
get $latest_file
bye
EOF

但我得到这个错误:

(remote-file) usage: get remote-file [ local-file ]

我认为我试图从 ftp 命令中获取文件的方式不正确,有人可以帮帮我吗?

【问题讨论】:

  • 你也下载到unix?
  • @shellter lastest_file 不是一个文件,它是一个环境变量。他尝试使用ftp 脚本中的lstail 来找出最新文件的名称。那是行不通的。

标签: unix ftp


【解决方案1】:

您不能在ftp 命令脚本中使用shell 功能,例如别名、管道、变量等。

ftp 不支持使用任何语法的此类高级功能。

不过,您可以分两步完成(在步骤之间利用外壳功能)。

首先获取远程目录列表到本地文件(/tmp/listing.txt):

ftp -nv <<EOF
open $hostname
user $username $password
cd $dir
nlist *abc.123.* /tmp/listing.txt
bye
EOF

查找最新文件:

latest_file=`tail -1 /tmp/listing.txt`

然后下载:

ftp -nv <<EOF
open $hostname
user $username $password
binary
cd $dir
get $latest_file
bye
EOF

【讨论】:

  • 脚本的第一部分(获取最新文件)按预期工作。但是为了在我执行第二个 ftp 时获取文件,我收到此错误:550 -rw-rw-r--: No such file or directory。如果我执行 ls 甚至 ls -lA,我会看到它的列表条目以“。”开头。和“..”有什么办法可以忽略这些条目而只获取文件?谢谢!
  • 1) 要解决第一个问题,请使用nlist 而不是ls。请参阅我的更新答案。 2)我想第二个问题与主题无关,对吧?不管怎样,grep -v ^.+$ /tmp/listing.txt
  • 感谢马丁!我解决了它。问题是,它正在从列表文件中获取最新文件,但这包括文件的完整目录以及它试图“获取”的权限。所以它正在寻找一个文件名“-rw-rw ...”我必须做一些解析来获取文件名,排除所有其他信息,然后用它来获取。
  • 顺便说一句,有了 nlist,我根本不需要做所有的解析。非常感谢!
  • 我想,应该使用 nlist -t 来获取排序列表
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-27
  • 1970-01-01
  • 2013-03-20
  • 1970-01-01
相关资源
最近更新 更多