在我的 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
给出“自纪元以来的秒数”,这对于计算持续时间非常有用(实际上也是唯一安全的方法)。