【问题标题】:Retrieving the last modified file in a directory over FTP using a bash script with curl使用带有 curl 的 bash 脚本通过 FTP 检索目录中最后修改的文件
【发布时间】:2011-11-25 22:57:30
【问题描述】:

我正在编写一个 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 文件的名称?还是在生成列表时可以进行一些处理?

干杯。

【问题讨论】:

    标签: file bash shell curl grep


    【解决方案1】:

    您可以使用多键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

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

    因此,您可以使用:

    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`
    

    【讨论】:

    • 干杯,试一试。会尽快回复您。
    • 完美运行。谢谢彼得。
    【解决方案2】:

    编辑:对不起,我刚刚意识到您需要的文件在远程 FTP 服务器上。我原以为它们是本地的,而您希望上传到 FTP。所以下面的一切都是无关紧要的。

    通常我会这样做: ls -1rt /path/to/zips/*.zip |尾 -n1

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

    还有find。您可以指定日期范围和名称。根据您正在执行的操作,您可能会选择每 x 分钟扫描一次目录以查找在最后 x 分钟内创建的文件。这样做的好处是可以拾取多个新文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-24
      • 2014-05-26
      • 2019-11-06
      • 2016-08-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多