使用带curl的bash脚本通过FTP检索目录中的最后一个修改过的文件

时间:2011-09-27 11:09:34

标签: file bash shell curl grep

我正在编写一个bash脚本,其中一个需要执行的任务是通过curl连接到FTP服务器并找到上次修改的.zip文件的名称。

我们正在查看的文件的名称格式为MM_DD_YYYY_ALL.zip

到目前为止,我有<< >>遗漏:

export FILEPATTERN=_ALL.zip

for FILE in `curl -u << SERVER INFO >> 2> /dev/null | grep ${FILEPATTERN} | awk -F\  '{print $9}'`
do
    ...
    # Do stuff with each file to determine most recent version.
    ...
done

文件名未格式化YYYY_MM_DD的事实似乎是一些快速修剪和计算无法完成的主要原因。

是否有一种有效的方法从此列表中提取最新修改的zip文件的名称?或者是否有一些处理可以在生成列表时完成?

干杯。

2 个答案:

答案 0 :(得分:4)

您可以使用多键sort命令一次性对文件名进行排序,并使用tail获取最后一行以获取最新文件。

您需要指定-t-以使用短划线作为排序的字段分隔符,-n来获取数字排序,并按优先级顺序列出每个字段。字段说明符的格式为:

-k, --key=POS1[,POS2]     start a key at POS1 (origin 1), end it at POS2
                          (default end of line)

因此,对于年份,字段3,您需要将其列为4个字符的宽度-k3,4

如果您按该顺序按年,月和日字段排序,您最终会得到一个包含所有日期顺序文件的列表。

因此,您可以使用:

代替上面的for循环
FILE=`curl -u << SERVER INFO >> 2> /dev/null | grep ${FILEPATTERN} | awk -F\  '{print $9}'
    | sort -n -t- -k3,4 -k1,2 -k2,2 |tail -1`

答案 1 :(得分:0)

编辑:抱歉,我刚刚意识到您需要的文件位于远程FTP服务器上。我以为他们是本地的,你希望上传到FTP。所以下面的一切都无关紧要。

通常我做的事情如下: ls -1rt /path/to/zips/*.zip |尾巴-n1

这并不总是一个好主意,文件名中的空格等。但它会在目录中返回最新的文件名。

也有发现。您可以指定日期范围和名称。根据您的操作,您可以选择每隔x分钟扫描一个目录,查找最近x分钟内创建的文件。这样做的好处是它可以获取多个新文件。