我正在编写一个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文件的名称?或者是否有一些处理可以在生成列表时完成?
干杯。
答案 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分钟内创建的文件。这样做的好处是它可以获取多个新文件。