我们有如下几个文件
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 函数。)