在一种情况下,我遇到了一堆文件,我只需要根据名字中出现的时间选择最早的文件。并非基于时间戳,因为我正在从一个系统到另一个系统执行SCP,所以一旦SCP运行,所有文件的时间戳都是相同的
我有类似文件
- UAT-2019-03-21-16-31.csv
- UAT-2019-03-21-17-01.csv
- AIT-2019-03-21-17-01.csv
在这里,2019年代表年份,03月代表一天,21日代表一天,16小时为24小时格式,而31代表分钟。
我需要首先从上述文件中选择UAT-2019-03-21-16-31.csv
文件。
我该如何在Shell脚本中进行操作。
我尝试执行ls -1
,但它将按字母顺序排序,这意味着将首先选择AIT-2019-03-21-17-01.csv,但我需要根据文件名中提到的时间>
答案 0 :(得分:1)
您可以尝试
ls -1 | sort -t"-" -k2 -k3 -k4 -k5 -k6 | head -n1
输出:
UAT-2019-03-21-16-31.csv
对替代方法感到好奇,因为我知道解析ls输出并不理想。
答案 1 :(得分:0)
做到这一点的最好,最有效的方法是将文件名时间戳转换为时代时间,并在其中找到最早的时间。
您需要编写一个按以下顺序执行的脚本:
将文件名时间戳转换为纪元时间的命令将是
date -d"2019-03-21T17:01" +%s
date -d"YYYY-MM-DDTHH:MM" +%s
您可以在脚本中尝试这些步骤
希望如此有助于您开始编写脚本。