在 bash 中,我只想将文件名列表过滤为 .csv,根据日期顺序(名称中的日期,而不是时间戳)排序,然后根据名称中的日期顺序返回最近的文件名:
[root@server test2]# curl -l "ftp.fakeurl.com.au/In Stock Daily CSV/" --user username:password
InStockDaily01.07.19.csv
InStockDaily01.07.19.xls
InStockDaily02.07.19.csv
InStockDaily02.07.19.xls
InStockDaily03.06.19.csv
InStockDaily03.06.19.xls
InStockDaily03.07.19.csv
InStockDaily03.07.19.xls
InStockDaily04.06.19.csv
InStockDaily04.06.19.xls
InStockDaily04.07.19.csv
InStockDaily04.07.19.xls
InStockDaily05.06.19.csv
InStockDaily05.06.19.xls
InStockDaily05.07.19.csv
InStockDaily05.07.19.xls
InStockDaily06.06.19.csv
InStockDaily06.06.19.xls
InStockDaily07.06.19.csv
InStockDaily07.06.19.xls
InStockDaily08.07.19.csv
InStockDaily08.07.19.xlsx
InStockDaily09.07.19.csv
InStockDaily09.07.19.xls
InStockDaily10.07.19.csv
InStockDaily10.07.19.xls
InStockDaily11.06.19.csv
尝试这个:
grep '\.csv$'
获取 csv 行sort -t. -k3,3 -k2,2 -k1,1
.
使用as 字段分隔符按第 3 个字段年份、第 2 个字段月份和第 1 个字段InStockDailyXX
与日期进行排序tail -n 1
获取最后一行(最新日期)在
zsh
中,您可以获得csv
s 的排序列表:然后最新的在
$list[-1]
*.csv(glob-qualifier)
: 带有 glob 限定符的 globoe'<code>'
:o
rder 根据对列表的e
估值code
(其中代码将$REPLY
变量设置为排序的基础)${(s:.:Oa)REPLY}
:在点上s
拆分$REPLY
变量(包含要考虑的文件名),并O
通过a
rray indice 反转 rder(反转列表)${(j::)list}
:加入列表的元素。因此,如果$REPLY
最初是InStockDaily10.07.19.csv
,则 glob 将排序的 new$REPLY
是csv1907InStockDaily10
.假设前缀始终与您的示例中的相同。如果没有,您可以使用:
结合参数扩展标志,从末尾提取匹配模式的后缀
%pattern
(因此将代替)。M
M
$REPLY
$REPLY
csv190710
csv1907InStockDaily10