ybash使用syslog文件格式内的最新日期

时间:2017-08-31 00:20:56

标签: linux bash shell date ssh

我有一个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和文件夹以及$month由ssh之前的用户输入定义。我想要的是这个脚本在文件夹$month内拖尾最新的文本文档。

dir格式如下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/year/month/day/host.log 目前该脚本将采用实际日期,例如今天2017/08/31 但是如果该盒子自2017/08/20以来一直处于脱机状态,那么2017/08/31文件夹中将没有日志文件。尽管如此,我的脚本将尝试当前日期。我的问题是如何强制脚本使用月份文件夹中的最后一个日期

1 个答案:

答案 0 :(得分:0)

您可以在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}