【问题标题】:ybash using latest date inside syslog file format [duplicate]ybash使用syslog文件格式中的最新日期[重复]
【发布时间】:2017-08-31 00:20:56
【问题描述】:

我有一个 bash 脚本,它将 ssh -tq 进入远程框并执行多个命令。 像这样的:

if [[ $answer = 1 ]] ; then
        ssh -tq box "
        cd /biglogs/
        sudo ls -g ./$host1/2017/$month1 | tail -5
        sudo tail  /$folder1/$host1/`date +%Y`/$month1/`date +%d`/$host2"
fi

所有变量都在 ssh 进入删除框之前定义。我的问题是我不确定如何删除最新的文本文件。如您所见,当前 sudo 尾部将进入 /folder1/$host1/`date +%Y`/$month1/`date +%d`/$host2"

$host1 和 folder 和 $month 在 ssh 之前由用户输入定义。我想要的是让这个脚本尾随文件夹$month 中的最新文本文档。

目录格式如下test1.test.t/2017/08/31/test1.test.1.txt 目前我的脚本将尝试用当天的日期跟踪文本文档,所以如果我要输入第 02 个月(查询将是 test1.test.t/2017/02/),脚本将添加 31(今天)所以它将是 test1.test.t/2017/02/31/,我们都知道它不正确。

对于将其标记为欺骗并使用 -d 的人,我认为这是不正确的。 文件夹结构是 /folder1/host/年/月/日/host.log 目前脚本将采用实际日期,例如今天 2017/08/31 但是如果该盒子自 2017/08/20 以来一直处于离线状态怎么办,因此文件夹 2017/08/31 中将没有日志文件。尽管如此,我的脚本仍会尝试当前日期。我的问题是如何强制脚本使用月份文件夹中的最后一个日期

【问题讨论】:

    标签: linux bash shell date ssh


    【解决方案1】:

    您可以在 ssh 之前检查日期:

    year=$(date +%Y)
    month1="02"
    day=$(date +%d) # current day is 31
    
    date -d "$(date +%Y-${month1}-${day})" 2>/dev/null
    # date: invalid date ‘2017-02-31’
    
    # if date fails
    if [[ $? -ne 0 ]]; then
        day=$(date -d "$(date +%Y-$((month1 + 1))-01) -1 day" +%d)
    fi
    
    echo ${year}-${month1}-${day}
    # prints: 2017-02-28
    

    所以在你的脚本中使用:

    sudo tail  /${folder1}/${host1}/${year}/${month1}/${day}/${host2}
    

    【讨论】:

    • 不确定这是否会按我需要的方式工作。此脚本将用于检查特定主机的日志。有时主机死了,日志会是空的,例如今天是 31 日,盒子在 28 日死了。将没有名为 31st 的文件,您在月份目录中找到的唯一文件将是 28th - 1st
    猜你喜欢
    • 2018-03-28
    • 1970-01-01
    • 2018-07-28
    • 2017-02-25
    • 1970-01-01
    • 2021-12-06
    • 2011-06-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多