Speichern und Anzeigen von Datumsangaben in einem Skript (Bash)

363
Phil Rigby

Auf meinem Linux (Ubuntu) habe ich ein sehr einfaches Backup-Skript, im Wesentlichen:

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

Was ich gerne machen würde, ist, bevor jedes rsync-Programm ausgeführt wird, das aktuelle Datum / die aktuelle Uhrzeit in einer Variablen zu speichern (offensichtlich eine andere var für jedes rsync). Wenn der letzte rsync-Vorgang abgeschlossen ist, drucken Sie auf dem Bildschirm Folgendes aus:

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

Ich habe null Skriptingfähigkeiten, also wäre jede Anleitung dankbar. Das Skript ist derzeit nur in Standard-bash und auf Ubuntu 18.04. Vielen Dank!

1
Zero Scripting-Fähigkeiten, lernen Sie das Scripting: http://tldp.org/guides.html -> "Bash Guide für Anfänger" und dann "Advanced Bash-Scripting Guide" - wenn Sie die Grundlagen verstehen, werden Sie in kürzester Zeit Scripting durchführen. Hannu vor 5 Jahren 0
Ich muss nicht sehr viele Skripte schreiben. Dies ist einfach eine Zeitersparnis, so dass ich nicht mehrere verschiedene, aber ähnliche Befehle ausführen muss, wenn ich Backups mache. Mir zu sagen "geh lern wie man schreibt" hilft nicht wirklich. Phil Rigby vor 5 Jahren 0
Das ist ein Ressourcenzeiger, sonst nichts. ;-) Mit wenig Aufwand erstellen Sie Ihre eigenen speziellen Skripte. Hannu vor 5 Jahren 0

1 Antwort auf die Frage

0
xenoid

Siehe den dateBefehl. Sie können das aktuelle Datum und die aktuelle Uhrzeit wie folgt in eine Zeichenfolge einfügen:

now=$(date) 

Oder beschränken Sie das auf die Zeit:

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

In einem Skript fügen Sie diese Werte in ein Array ein:

#!/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))" "$" done 

Es gibt viele Möglichkeiten, das Datum zu formatieren. Wenn Sie in Ihrem Skripting weiter gehen, ist das nützlichste %s, das "Sekunden seit der Epoche" gibt, was sehr nützlich ist (und der einzig sichere Weg), um die Dauer zu berechnen.

Danke, das scheint der richtige Weg zu sein ... Ich habe mich nicht mit der Berechnung der Dauer beschäftigt, ich kann das mental machen, indem ich mir die Zeiten anschaue. Wie @KamilMaciorowski erwähnt hat, wären die zum Speichern / Drucken erforderlichen Schritte fantastisch! Phil Rigby vor 5 Jahren 0