Datei kopieren und mit Timestamp umbenennen

Registriert
Juli 2020
Beiträge
228
Hallo Auskenner/innen,
Ich möchte eine Datei in ein anderes Verzeichnis kopieren und mit einem anderen Namen ablegen.

Quelle: /home/max/abc/.log

Ziel: /home/max/Public/Daten/Logs/xyz/2024-06-22–14-45-34-sicherung.txt

Ich möchte also, dass gleichzeitig die Datei umbenannt wird: Aktuelles Datum und aktuelle Zeit in der Form
Code:
YYYY-MM-TT--HH-MM-SS-sicherung.txt

Wie mache ich das bitte?
 
cp /home/max/abc/.log /home/max/Public/Daten/Logs/xyz/$(date +%Y-%m-%d--%H-%M)-backup.txt
 
  • Gefällt mir
Reaktionen: Grimba, sedot, plain.text und 3 andere
Du meinst so?
cp /home/max/abc/.log /home/max/Public/Daten/Logs/xyz/$(date +%Y-%m-%d--%H-%M-%S)-sicherung.txt

Huch. Da war wohl einer schneller. :-)
 
  • Gefällt mir
Reaktionen: Holzohrwascherl
Auch dir besten Dank, ich habe mit

Code:
cp /home/max/abc/.log /home/max/Public/Daten/Logs/xyz/%Y-%m-%d-%H-%M-%S-sicherung.txt

erfolglos herumgestümpert.
Ergänzung ()

Darf ich gleich unverschämt noch was fragen?

Ich gebe im Terminal zunächst drei Befehle ein:

Code:
cd FreeFileSync
export DISPLAY=:0
FreeFileSync sync_all.ffs_batch

Jetzt warte ich, bis er mit dem Syncen fertig ist.
Danach starte ich rsnapshot:

Code:
sudo rsnapshot beta
<Passwort eingeben>
Wenn dieser Sicherungsjob fertig ist, gebe ich den coolen Kopierbefehl
Code:
cp /home/max/abc/.log /home/max/Public/Daten/Logs/xyz/$(date +%Y-%m-%d--%H-%M)-backup.txt
ein.
Wie verpacke ich das alles in ein Skript, das ich einfach remote in einem Terminal aufrufe?

Der Befehl FreeFileSync sync_all.ffs_batch wird ja mit normalen Userrechten ausgeführt, der Befehl rsnapshot benötigt jedoch sudo. Natürlich möchte ich kein Passwort eingeben müssen.
Ausserdem müsste er immer warten, bis der jeweilige Vorgänger-Befehl vollständig ausgeführt ist. Geht das?
 
Zuletzt bearbeitet:
Holzohrwascherl schrieb:
Ja. Geht. Das sudo-Passwort kannst Du umgehen, wenn Du sudo entsprechend konfigurierst (NOPASSWD - Option): deinuser ALL=(ALL) NOPASSWD: /usr/bin/rsnapshot
siehe dazu auch sudo.conf(5)

Ansonsten kann man Befehle mit && verketten. Der nachfolgende Befehl wird jeweils nur dann ausgeführt, wenn der vorherige beendet wurde und das auch ohne Fehler.
Beispiel:
cd FreeFileSync && env DISPLAY=:0 FreeFileSync sync_all.ffs_batch && sudo rsnapshot beta

Sieht übrigens so aus, als wenn FreeFileSync ein X11-Tool ist. Das wird Remote auf der Kommandozeile so nicht gehen, da Du nicht so ohne Weiteres auf fremde X-Sessions zugreifen kannst.
Ich kenne Aber Deine Gegebenheiten nicht, um da noch exakte Auskunft geben zu können.
 
  • Gefällt mir
Reaktionen: AlphaKaninchen und sedot
Super, besten Dank.
Ja, FreeFileSync funktioniert bestens im Terminal über SSH, setze ich schon länger ein.
Aber nicht ohne das
Code:
export DISPLAY=:0
 
andy_m4 schrieb:
Ansonsten kann man Befehle mit && verketten

Oder an den Anfang ein set -e schreiben. Das bewirkt an Abbrechen des Skriptes beim ersten Fehler, d.h. wenn ein Return Code nicht Null ist.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: andy_m4
Danke allen für die Hilfe.
Nun habe ich mein Skript zum Laufen gebracht. Für Leser, die über diesen Faden stolpern (vielleicht freut sich der eine oder andere):

Voraussetzungen:
  • Ich habe FreeFileSync installiert und eine Batchdatei (sync_all.ffs_batch) gebastelt, in der die Quellverzeichnisse und die Zielverzeichnisse abgelegt sind.
  • Ich habe rsnapshot installiert und in der Konfigurationsdatei rsnapshot.conf dasselbe gemacht.

(1) Ein Skript erstellt, Dateiname: double_backup.sh

Code:
#! /bin/bash

# Bei jedem Befehl warten, bis er ohne Fehler abgearbeitet ist; erst danach neuen Befehl ausführen:
set -e

#In das Verzeichnis FreeFileSync wechseln:
cd /home/max/FreeFileSync

# Bewirkt, dass FreeFileSync über SSH aufgerufen werden kann:
export DISPLAY=:0

# Aufruf von FreeFileSync mit der konfigurierten Batchdatei:
FreeFileSync sync_all.ffs_batch

# Aufruf von rsnapshot mit dem Backup-Intervall beta:

sudo rsnapshot beta

# Kopiert das Logfile auf das QNAP-NAS in das Verzeichnis Daten/Logs/rsnapshot und benennt die Logdatei mit Datums- und Zeitangabe um:
cp /home/max/rsnapshot_logs/.log /home/max/Public/Daten/Logs/rsnapshot/$(date +%Y-%m-%d--%H-%M)-backup.txt

(2) Skript ausführbar gemacht:

Code:
chmod +x double_backup.sh

(3) Skript überall verfügbar gemacht:

Code:
sudo mv /home/max/Dateien/double_backup.sh /usr/local/bin

(4) Im Terminal mit

Code:
sudo visudo

die Konfigurationsdatei für sudo geöffnet und nach (!) der Zeile

Code:
%sudo   ALL=(ALL:ALL) ALL

aber noch vor (!) der Zeile

Code:
@includedir /etc/sudoers.d

diese Zeile eingefügt:

Code:
max     ALL = NOPASSWD: /usr/bin/rsnapshot

Nun kann das Skript double_backup.sh ohne sudo und ohne Passwortabfrage gestartet werden.
Vielleicht kann diese Infos jemand gebrauchen.

Weshalb das doppelte Sichern der Daten? Ich hatte etliche intakte Festplatten herumliegen und habe mit ihnen ein Logical Volume (18 TB) gebaut. Die Daten meines NAS werden zuerst mit FreeFileSync einfach in dieses LV gespiegelt. Die Daten dienen nur der Schnellverfügbarkeit, falls etwas mit dem NAS passieren sollte. Ein Studenten-RAID sozusagen.
Das eigentliche Backup (inkl. Versionsverwaltung) wird von diesem LV mit rsnapshot im Anschluss auf ein weiteres LV eines weiteren LV-Systems gezogen.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: rallyco
Zurück
Oben