Armazenar e exibir datas em um script (bash)

1

No meu Linux (Ubuntu) eu tenho um script de backup muito simples, essencialmente:

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

O que eu gostaria de fazer é antes de cada rsync ser executado, armazenar a data / hora atual em uma variável (obviamente um var diferente para cada rsync) e quando o último rsync terminar, imprimir na tela algo como:

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

Eu tenho zero habilidades de script para que qualquer orientação seja bem-vinda. O script atualmente está apenas no bash padrão e no Ubuntu 18.04, duvido que isso importe. Obrigado!

    
por Phil Rigby 21.09.2018 / 17:39

1 resposta

0

Veja o comando date . Você pode colocar a data / hora atual em uma string como esta:

now=$(date)

Ou restrinja isso apenas para o horário:

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

Em um script, você coloca esses valores em uma matriz:

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

Existem muitas opções para formatar a data. Se você for mais longe no seu script, o mais útil é %s , que dá "segundos desde a Época", o que é muito útil (e realmente a única forma segura) de calcular durações.

    
por 21.09.2018 / 17:49