在文件名中根据日期选择最早的文件

时间:2019-06-06 08:37:38

标签: bash shell

在一种情况下,我遇到了一堆文件,我只需要根据名字中出现的时间选择最早的文件。并非基于时间戳,因为我正在从一个系统到另一个系统执行SCP,所以一旦SCP运行,所有文件的时间戳都是相同的

我有类似文件

  
      
  1. UAT-2019-03-21-16-31.csv
  2.   
  3. UAT-2019-03-21-17-01.csv
  4.   
  5. AIT-2019-03-21-17-01.csv
  6.   

在这里,2019年代表年份,03月代表一天,21日代表一天,16小时为24小时格式,而31代表分钟。

我需要首先从上述文件中选择UAT-2019-03-21-16-31.csv文件。 我该如何在Shell脚本中进行操作。

我尝试执行ls -1,但它将按字母顺序排序,这意味着将首先选择AIT-2019-03-21-17-01.csv,但我需要根据文件名中提到的时间

2 个答案:

答案 0 :(得分:1)

您可以尝试

ls -1 | sort -t"-" -k2 -k3 -k4 -k5 -k6 | head -n1

输出:

UAT-2019-03-21-16-31.csv

对替代方法感到好奇,因为我知道解析ls输出并不理想。

答案 1 :(得分:0)

做到这一点的最好,最有效的方法是将文件名时间戳转换为时代时间,并在其中找到最早的时间。

您需要编写一个按以下顺序执行的脚本:

  1. 将所有文件名时间戳记放入一个变量。
  2. 将所有文件名时间戳转换为纪元时间。
  3. 找到最早的文件并获取文件名。

将文件名时间戳转换为纪元时间的命令将是

date -d"2019-03-21T17:01" +%s
date -d"YYYY-MM-DDTHH:MM" +%s

您可以在脚本中尝试这些步骤

希望如此有助于您开始编写脚本。