linux - ybash 使用 syslog 文件格式中的最新日期

标签 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 中跟踪最新的文本文档。

目录格式如下test1.test.t/2017/08/31/test1.test.1.txt 目前,我的脚本将尝试使用当天的日期对文本文档进行尾部处理,因此如果我输入 2 月(查询将是 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 中将没有日志文件怎么办。尽管如此,我的脚本还是会尝试当前日期。我的问题是如何强制脚本使用月份文件夹中的最后日期

最佳答案

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

关于linux - ybash 使用 syslog 文件格式中的最新日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45971495/

相关文章:

linux - 如何在 Linux 上找到我的完全量化域名?

c - Linux kernel 3.x - 了解在内核空间获取mac地址的方式

bash - 从 Shell 脚本执行 PL SQL 过程

linux - 添加文件夹中所有视频文件的持续时间

Linux ACPI 配置

linux - 我在哪里可以获得 xdg 菜单层次结构

linux - 使用脚本读取数字的最简单方法

linux - 为尾部输出着色

bash - 为什么 `(( 0 ))`在.sh脚本中返回值为1?

python-3.x - 当我尝试在 GCP 上导入 NumPy 库时,如何修复出现的 Python 错误 "...failed to map segment from shared object"?