rsync nur neuster Ordner kopieren

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
slu
Beiträge: 2234
Registriert: 23.02.2005 23:58:47

rsync nur neuster Ordner kopieren

Beitrag von slu » 28.07.2016 15:22:21

Hallo,

ich hab mir mit Debianrsbackup eine Sicherung aufgebaut, diese sieht wie folgt auf:

Code: Alles auswählen

/var/lib/rsbackup/server1/root/2016-07-28/
/var/lib/rsbackup/server1/root/2016-07-27/
/var/lib/rsbackup/server1/root/2016-07-26/

/var/lib/rsbackup/server2/root/2016-07-28/
/var/lib/rsbackup/server2/root/2016-07-27/
/var/lib/rsbackup/server2/root/2016-07-26/

/var/lib/rsbackup/server3/root/2016-07-28/
/var/lib/rsbackup/server3/root/2016-07-27/
/var/lib/rsbackup/server3/root/2016-07-26/

/var/lib/rsbackup/notebook1/root/2016-07-22/
/var/lib/rsbackup/notebook1/root/2016-07-20/

/var/lib/rsbackup/notebook2/root/2016-07-24/
Es gibt also pro Server/Workstation Ordner mit einem Datum und den Dateien.
Jetzt möchte ich mit rsync ein Offsite Backup machen, aber nur jeweils die aktuellste Sicherung.
Problem dabei ist, einzelne Workstations können eine ältere Sicherung haben, wie z.b. das "notebook1" welche aber die aktuellste wäre.

Wie mache ich so etwas mit rsync, am besten mit --include-from und vorher die Ordner ermitteln?
Find und aktuelles Datum, wenn es keinen Treffer gibt einen Tag abziehen und noch einmal suchen?

Oder gibt es einen besseren Weg?
Gruß
slu

Das Server Reinheitsgebot:
Debian Bookworm, sonst nichts.

Stolzer Gewinner der Jessie Release Wette:
https://wiki.debianforum.de/Jessie_Release_Wette#SIEGER

Benutzeravatar
heisenberg
Beiträge: 4123
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: rsync nur neuster Ordner kopieren

Beitrag von heisenberg » 28.07.2016 15:38:50

Kleines script....

Code: Alles auswählen

   cd /var/lib/rsbackup
   for dir in *;do
   ls -dt $dir/* |head -n1 
   done | rsync --files-from ...

slu
Beiträge: 2234
Registriert: 23.02.2005 23:58:47

Re: rsync nur neuster Ordner kopieren

Beitrag von slu » 28.07.2016 17:17:30

@ heisenberg,
vielen Dank!

Ich musste es noch etwas anpassen, hatte das aber im Beispiel auch nicht so beschrieben.

Code: Alles auswählen

#!/bin/bash
cd /tmp/testen
   for dir in */*;do
   ls -dt $dir/* | head -n1
done | rsync -avHP --delete --numeric-ids --files-from - /tmp/testen /tmp/testencopy
Was ich überhaupt nicht verstehe, obwohl bei rsync -a gesetzt ist werden nur die Ordner kopiert, nicht die Dateien in den Ordnern.

Code: Alles auswählen

slu@wdlw01:/tmp$ sh script.sh 
building file list ... 
10 files to consider
created directory /tmp/testencopy
server1/
server1/home/
server1/home/28.07.2016/
server1/root/
server1/root/26.07.2016/
server2/
server2/home/
server2/home/27.07.2016/
server2/root/
server2/root/28.07.2016/

sent 283 bytes  received 84 bytes  734.00 bytes/sec
total size is 0  speedup is 0.00
slu@wdlw01:/tmp$
Ich hätte erwartet das er auch die "file.txt" in den Ordnern mit kopiert (bitte nicht auf das Datum der Ordner achten, hab die von Hand in der falschen Reihenfolge angeleget).

Code: Alles auswählen

slu@wdlw01:/tmp/testen$ find
.
./server2
./server2/home
./server2/home/27.07.2016
./server2/home/27.07.2016/file.txt
./server2/home/28.07.2016
./server2/root
./server2/root/26.07.2016
./server2/root/26.07.2016/file.txt
./server2/root/27.07.2016
./server2/root/27.07.2016/file.txt
./server2/root/28.07.2016
./server2/root/28.07.2016/file.txt
./server1
./server1/home
./server1/home/27.07.2016
./server1/home/27.07.2016/file.txt
./server1/home/28.07.2016
./server1/root
./server1/root/26.07.2016
./server1/root/26.07.2016/file.txt
./server1/root/27.07.2016
./server1/root/27.07.2016/file.txt
./server1/root/28.07.2016
./server1/root/28.07.2016/file.txt
slu@wdlw01:/tmp/testen$
Irgendwie scheint das mit dem "--files-from -" nicht richtig zu sein?
Gruß
slu

Das Server Reinheitsgebot:
Debian Bookworm, sonst nichts.

Stolzer Gewinner der Jessie Release Wette:
https://wiki.debianforum.de/Jessie_Release_Wette#SIEGER

slu
Beiträge: 2234
Registriert: 23.02.2005 23:58:47

Re: rsync nur neuster Ordner kopieren

Beitrag von slu » 28.07.2016 18:34:36

Mhm wenn ich statt dem -a alle Optionen aufzähle geht es:

Code: Alles auswählen

rsync -rlptgoDHPe ssh --stats --delete --numeric-ids --files-from - /var/lib/rsbackup/ 10.23.0.50:/mnt/disk1/rsbackup
Bug in rsync :roll:

Final sieht das Script so aus:

Code: Alles auswählen

#!/bin/bash
cd /var/lib/rsbackup
   for dir in */*;do
   ls -dt $dir/* | sort -r | head -n1
   done | rsync -rlptgoDHPe ssh --stats --delete --numeric-ids --files-from - /var/lib/rsbackup/ 192.168.43.50:/mnt/disk/rsbackup
exit 0
Ich musste noch ein "sort -r" einbauen weil viele Ordner zum gleichen Zeitpunkt erstellt wurden.
Gruß
slu

Das Server Reinheitsgebot:
Debian Bookworm, sonst nichts.

Stolzer Gewinner der Jessie Release Wette:
https://wiki.debianforum.de/Jessie_Release_Wette#SIEGER

Antworten