1

В моем 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 ответ1

0

Смотрите команду 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 который дает "секунды с начала эпохи", что очень полезно (и действительно является единственным безопасным способом) для вычисления длительностей.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .