在脚本中存储和显示日期(bash)

在脚本中存储和显示日期(bash)

在我的 Linux(Ubuntu)上,我有一个非常简单的备份脚本,本质上:

rsync <params> dir_src_a dir_dest_b
rsync <params> dir_src_aa dir_dest_bb
rsync <params> dir_src_aaa dir_dest_bbb

我想要做的是,在每次 rsync 运行之前,将当前日期/时间存储在一个变量中(显然每个 rsync 都有一个不同的变量),然后当最后一个 rsync 完成时,在屏幕上打印类似以下内容:

rsync 1 started at startdate
rsync 2 started at startdate
rsync 3 started at startdate

我没有任何脚本技能,因此任何指导都非常感谢。该脚本目前仅在标准 bash 和 Ubuntu 18.04 中,但怀疑这很重要。谢谢!

答案1

参见date命令。你可以将当前日期/时间放入字符串中,如下所示:

now=$(date)

或者将其限制为仅时间:

now=$(date +%H:%M:%S)

在脚本中,将这些值放入数组中:

#!/bin/bash

# declare array
set -a times

# Loop over the directories
for d in dir1 dir2 dir3
do
  # Add the current time at the end of the array
  times[${#times[*]}]=$(date +%H:%M:%S)
  # Perform rsync (replace next two by actual code)
  echo rsync $d
  sleep 2
done

# Loop over array of start times, "${!times[@]}" produces a 0-based sequence of indices over the array
for i in "${!times[@]}"; 
do 
  # Print the time ( "$((i+1))" increments the number because unlike computers, humans counts from 1)
  printf "Rsync of dir #%s started at %s\n" "$((i+1))" "${times[$i]}"
done

有很多选项可以格式化日期。如果你进一步了解脚本,最有用的选项是%s给出“自纪元以来的秒数”,这对于计算持续时间非常有用(实际上也是唯一安全的方法)。

相关内容