在linux中根据具有dd-mm-yyyy hh:m:s的文件名选择最新文件

在linux中根据具有dd-mm-yyyy hh:m:s的文件名选择最新文件

我们有如下几个文件

employee.arya-date-01-1-2022-time-22:42:00.txt.csv
employee.arya-date-02-1-2022-time-16:29:00.txt.csv
employee.arya-date-02-1-2022-time-19:35:00.txt.csv
employee.arya-date-03-1-2022-time-7:12:00.txt.csv
employee.arya-date-04-1-2022-time-16:33:00.txt.csv
employee.arya-date-04-1-2022-time-2:23:00.txt.csv
employee.arya-date-04-1-2022-time-7:2:00.txt.csv
employee.arya-date-29-1-2022-time-7:2:00.txt.csv

根据文件名:最新的文件将为“ employee.arya-date-29-1-2022-time-7:2:00.txt.csv”,但是当我尝试运行如下命令时,无法选择最新的文件为“ employee.arya-date-04-1-2022-time-7:1:00.txt.csv

尝试过命令:但不起作用:

ls employee.arya-*|sort -r|head -1

有什么办法可以获取最新的文件。我尝试了 ls 和 sort 中的所有选项,但没有一个起作用。任何人都可以建议吗

答案1

这是一个可以完成这项工作的快速脚本。

(注意:我更改了此设置以使其更加与区域设置无关,但它仍然可能不适用于所有区域设置;timestamp=如果date您接受不同的格式,请编辑该行。)

#!/bin/bash
latest=''
latesttimestamp=0
for file in employee.arya-* ; do
    # remove everything up to -date-
    datetime="${file#*-date-}"
    # remove .txt.csv
    datetime="${datetime%.txt.csv}"
    # get the time (after -time-)
    time="${datetime#*-time-}"
    # get the date (before -time-)
    date="${datetime%-time-*}"
    # get the day
    dd="${datetime%%-*}"
    # get the month and year
    mmyy="${date#*-}"
    mm="${mmyy%-*}"
    yyyy="${mmyy#*-}"
    # get the timestamp for that datetime
    timestamp="$(date --date="$yyyy/$mm/$dd $time" +'%s')"
    # compare to latest found so far
    if [[ "$timestamp" -gt "$latesttimestamp" ]] ; then
        latest="$file"
        latesttimestamp="$timestamp"
    fi
done
echo "$latest"

将其另存为latestfile.sh或其他任何内容,在您的$PATH.使其可执行(chmod a+x latestfile.sh),然后latestfile.sh就可以了。

(如果您愿意,也可以轻松地将其变成 shell 函数。)

相关内容