如何使用shell脚本从远程存储库下载最新文件?

如何使用shell脚本从远程存储库下载最新文件?,shell,wget,Shell,Wget,我有一个存储发布版本的远程存储库。我想做的是编写一个shell脚本来下载最新版本(一个.zip文件)。存储库网页如下所示: 1.0.0 |---> 1.0.0.zip(link) 1.0.1 |---> 1.0.1.zip(link) 1.0.2 |---> 1.0.2.zip(link) #!/bin/bash # base path to server base="http://path/to/file/" # get files contained i

我有一个存储发布版本的远程存储库。我想做的是编写一个shell脚本来下载最新版本(一个.zip文件)。存储库网页如下所示:

1.0.0
  |---> 1.0.0.zip(link)

1.0.1
  |---> 1.0.1.zip(link)

1.0.2
  |---> 1.0.2.zip(link)
#!/bin/bash

# base path to server
base="http://path/to/file/"
# get files contained in base dir
lynx -dump -listonly "${base}" | grep http | grep '1\.0\.[0-9]+\.zip' | awk '{print $2}' > .tmpfiles
# get latest version number (x)
version=$(awk -F'.' '{ print $3 }' .tmpfiles | sort | tail -n1)
# get filename of latest build
latest=$(grep "1.0.${version}" .tmpfiles)
# download latest file
wget -qO - "${base}${latest}" > .tmp.zip && unzip .tmp.zip
1.0.x是一个目录,zip文件驻留在其中。每天都会发布一个或多个版本。基本上我想构建一个URL,比如


由于x自动识别网页上的最新数字,因此wget将易于使用。

您或许可以这样做:

1.0.0
  |---> 1.0.0.zip(link)

1.0.1
  |---> 1.0.1.zip(link)

1.0.2
  |---> 1.0.2.zip(link)
#!/bin/bash

# base path to server
base="http://path/to/file/"
# get files contained in base dir
lynx -dump -listonly "${base}" | grep http | grep '1\.0\.[0-9]+\.zip' | awk '{print $2}' > .tmpfiles
# get latest version number (x)
version=$(awk -F'.' '{ print $3 }' .tmpfiles | sort | tail -n1)
# get filename of latest build
latest=$(grep "1.0.${version}" .tmpfiles)
# download latest file
wget -qO - "${base}${latest}" > .tmp.zip && unzip .tmp.zip
您可以轻松地修改它,以便将版本号作为参数传递给脚本


但是,如果构建存储在FTP服务器上,那么创建一个简单的FTP脚本就容易多了。

你怎么知道x?或者,如果你不知道x,你必须测试每个合理的x数字才能得到你想要的(不是很有效)考虑使用FTP服务器,你可以列出目录中的文件,并通过检查修改时间自动选择最新的文件,或者只需将它们以字母数字形式列出,然后取最后一个。-顺便说一句,通过FTP列出文件的命令只是
ls
,所以像
ls | sort | tail-n1
这样的操作并不难。例如,如果你想,1.0.x版本只需像这样发布
grep
ls | grep'1\.0\..*\.zip'| sort | tail-n1
。这也可以通过HTTP实现,但你需要在web服务器上的某个地方存储一个zip文件列表及其位置,如果你有,这是小菜一碟。谢谢,我已经得到了想要的。