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

Lew*_*ton 2 bash shell grep curl file

我正在编写一个 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
Run Code Online (Sandbox Code Playgroud)

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

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

干杯。

小智 6

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

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

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

因此,对于年份,字段 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`
Run Code Online (Sandbox Code Playgroud)