Przechowywanie i wyświetlanie dat w skrypcie (bash)

1

Na moim Linuksie (Ubuntu) mam bardzo prosty skrypt kopii zapasowej, zasadniczo:

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

To, co chciałbym zrobić, to to, że przed każdym uruchomieniem rsync zapisz bieżącą datę / godzinę w zmiennej (oczywiście dla każdego rsync innego var), a kiedy skończy się ostatni rsync, wydrukuj na ekranie coś w stylu:

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

Mam zerowe umiejętności pisania skryptów, więc wszelkie wskazówki będą mile widziane. Skrypt jest obecnie w standardowym bashu, aw Ubuntu 18.04, ale wątpię w to. Dzięki!

Phil Rigby
źródło
Zero umiejętności pisania skryptów, ucz się skryptowania: tldp.org/guides.html - & gt; „Bash Guide for Beginners”, a następnie „Advanced Bash-Scripting Guide” - jak tylko zrozumiesz podstawy, będziesz natychmiast wykonywać skrypty.
Hannu
Nie muszę pisać bardzo wielu skryptów. To jest po prostu oszczędność czasu, więc nie muszę uruchamiać kilku różnych, ale podobnych poleceń, gdy robię kopie zapasowe. Mówienie mi, żebym „nauczył się jak pisać”, nie pomaga.
Phil Rigby
To jest wskaźnik zasobów, nic więcej. ;-) Przy odrobinie wysiłku będziesz tworzyć własne specjalne skrypty.
Hannu

Odpowiedzi:

0

Zobacz date dowództwo. Możesz umieścić bieżącą datę / godzinę w łańcuchu w następujący sposób:

now=$(date)

Lub ogranicz to tylko do czasu:

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

W skrypcie umieszczasz te wartości w tablicy:

#!/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

Istnieje wiele opcji formatowania daty. Jeśli pójdziesz dalej w swoich skryptach, najbardziej użyteczny jest skrypt %s to daje „sekundy od epoki”, co jest bardzo przydatne (i naprawdę jedyny bezpieczny sposób) do obliczania czasów trwania.

xenoid
źródło
Dzięki, wydaje mi się, że to droga ... nie przejmuję się obliczaniem czasu trwania, mogę to zrobić psychicznie, patrząc na czasy. Jak wspomniał @KamilMaciorowski, kroki potrzebne do przechowywania / drukowania byłyby niesamowite!
Phil Rigby