Bash函数“使用”目录中最新的“日期”文件

问题描述 投票:0回答:2

我确定我可以想出一种方法来完成此操作,但是我坐在这里画了一个完整的空白,我也无法弄清楚如何搜索我正在寻找的东西。所以我想我就去问...

我有一个目录,随着时间的推移,该目录中包含大量的日志文件。我真的很想保留有关系统的信息,因此,如果我在其他地方遇到特定问题,可以解决此问题,因此我的系统会保留大量自动日志,通常包括简单重定向的应用程序输出等事情...在某些情况下,我想对最近的日志做一个记录,我想快速查看它,但是我并不总是确定此特定日志的日期,我只是知道这是最后一个创建的日志,我通常知道日志的类型以及是否有描述(通常没有描述,这就是为什么这样做很必要)的原因。因此,我想在bashrc中创建一个“简单”函数来解决此问题,基本上我想要的是一个转到特定目录并按日期查找最新日志的函数(始终采用相同格式),并用更少的时间打开它或任何我想要的传呼机。

日志的格式如下:typeoflog-short-description-$(日期“ +%-m-%-d-%y”)基本上,最后3个破折号之间的数字是我感兴趣的数字,例如:

whatever-changes-1-18-19

现在如果是2019年1月20日,并且这是添加到目录中的最后一个日志,我需要一种方法来查看文件名的后两位数字中最高的数字(我确实没有遇到任何问题),然后检查距离最后一组数字最高的2个“破折号”(月份是2位数还是1),然后在该月的某天执行相同的操作并将其设置为本地变量,然后像下面的示例一样使用它。

类似这样的东西:

viewlatestlog(){
    local loc="~/.logdir"
    local name=$(echo $loc/*-19 | #awk or cut or sort or i could even loop it from 1-31 and 1-12 for the days and months.)
    #I have ideas, but i know there has to be a better way to do this and it's not coming to me, maybe with expr or a couple of sort commands; i'm not sure, it would have been easier if i had made is so that each date number had 2 digits always... But I didn't
    ## But the ultimate goal is that i can run something like this command at the end
    less $loc/$name
{

PS。为了获得奖励积分,您还可以告诉我是否有一种方法可以自动将文件名(带有位置以及所有位置或不包含位置,我不在乎)复制到我的linux剪贴板中,因此当我记笔记时,我可以“链接”到日志文件,如果我需要返回它的话...

bash function date filenames
2个回答
0
投票

假设您的文件名不包含制表符或换行符,怎么办:

loc="~/.logdir"
for f in "$loc"/* ; do
    if [[ $f =~ -([0-9]{1,2})-([0-9]{1,2})-([0-9]{2})$ ]]; then
        mm=${BASH_REMATCH[1]}
        dd=${BASH_REMATCH[2]}
        yy=${BASH_REMATCH[3]}
        printf "%02d%02d%02d\t%s\n" "$yy" "$mm" "$dd" "$f"
    fi
done | sort -r | head -n 1 | cut -f 2

  • 首先从文件名中提取月份,日期和年份。
  • 然后创建一个日期字符串,格式为“ YYMMDD”,并添加到用制表符分隔的文件名。
  • 然后您可以在列表上执行sort命令。
  • 最后,您可以通过使用topcut提取来获得所需的(最新)文件名。

希望这会有所帮助。


0
投票

GNU sort可以按字段排序:

$ find . -name whatever-changes-\* | sort -n -t- -k5 -k3 -k4
./whatever-changes-3-01-18
./whatever-changes-1-18-19
./whatever-changes-2-12-19
./whatever-changes-11-01-19

选项-t指定字段定界符,选项-k选择以1开头的字段。选项-n指定数字排序。

© www.soinside.com 2019 - 2024. All rights reserved.