Dateien mit rsync mit "älter als" abholen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
rannseier
Beiträge: 57
Registriert: 24.09.2007 12:37:30

Dateien mit rsync mit "älter als" abholen

Beitrag von rannseier » 03.01.2023 17:45:25

Hallo zusammen,

Von einer vertrauensunwürdigen Maschine sollen Dateien älter als x Minuten abgeholt werden.

Wenn man der Maschine vertraut geht es ja von dort aus z.B. mit:

find /var/xyz/blubb/*.txt -type f -mmin +5 -exec rsync -avtr --remove-source-files --progress --partial --remove-source-files {} back@172.19.123.1:/home/back/transfer/ \;

Nun wird der Maschine nicht mehr vertraut, deshalb sollen die Dateien von aussen abgeholt werden, ohne dass dort weiter Scripte laufen.

Leider werden die Dateien einige Zeit lang beschrieben, so dass ein einfaches rsync nicht ausreicht, darum der Parameter -mmin +5.

Hat jemand eine (einfache) Idee?

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

Re: Dateien mit rsync mit "älter als" abholen

Beitrag von heisenberg » 03.01.2023 17:56:43

Ungefähr so?

Code: Alles auswählen

ssh remote_system find -print0 ... -mmin +5 \| cpio -Hcrc --null -o \| gzip >local-archive.cpio-crc.gz
Geht auch mit tar. Aber ich mag cpio lieber, weil das CRC-Format die Datenintegrität prüfen lässt.

Ansonsten kannst Du es auch einfach mal lokal spiegeln und dann von lokal sichern. Z. B. so:

Code: Alles auswählen

ssh remote_system find ... -print0 ... -mmin +5 \| cpio -o --null --numeric-uid-gid \| gzip | gunzip | cpio -i --make-directories -D /lokaler/pfad --numeric-uid-gid
Die Zeilen sind ungetestet. Bitte vorher selbst die Bedeutung nochmal nachlesen und mit Vorsicht testen.

Wichtig: Das ist ein wichtiger Unterschied ob da eine Pipe | oder eine geschützte Pipe \| steht.
Jede Rohheit hat ihren Ursprung in einer Schwäche.

JTH
Moderator
Beiträge: 3023
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: Dateien mit rsync mit "älter als" abholen

Beitrag von JTH » 03.01.2023 20:10:15

rannseier hat geschrieben: ↑ zum Beitrag ↑
03.01.2023 17:45:25
Nun wird der Maschine nicht mehr vertraut
Inwiefern wird denn der Maschine nicht vertraut? Jede Lösung mit rsync, die man dir vorschlagen kann, egal ob mit Vorauswahl der Dateien oder nicht, setzt voraus, dass du zumindest dem rsync-Binary und SSH-Daemon auf der entfernten, vertrauensunwürdigen Maschine „traust“.

Man könnte deine Dummy-Zeile als Dateiauswahl in rsync pipen, mit Hilfe von --files-from:

Code: Alles auswählen

ssh EVIL_HOST find '/var/xyz/blubb/*.txt' -type f -mmin +5 | rsync -avP --files-from=- --remove-source-files EVIL_HOST:/var/xyz/blubb/ /home/back/transfer/
Auf dem „back“-Host auszuführen. Ungetestet, ein --dry-run wär nicht verkehrt.. -a schließt -t schon ein; -r normalerweise auch, zusammen mit --files-from allerdings nicht; -P ist kurz für --progress --partial. Falls notwendig, kann man hier auch -print0 + --from0 benutzen.
Manchmal bekannt als Just (another) Terminal Hacker.

rannseier
Beiträge: 57
Registriert: 24.09.2007 12:37:30

Re: Dateien mit rsync mit "älter als" abholen

Beitrag von rannseier » 10.01.2023 19:52:00

Ich habe das nun mal ausprobiert.

Code: Alles auswählen

ssh EVIL_HOST find '/var/xyz/blubb/*.txt' -type f -mmin +5 | rsync -avP --files-from=- --remove-source-files EVIL_HOST:/var/xyz/blubb/ /home/back/transfer/
EVIL_HOST:/var/xyz/blubb/ klappt nur mit EVIL_HOST:/ und dann wird der komplette Pfad im Zielverzeichnis erstellt also z.B. /home/back/transfer/var/xyz/blubb/123.txt

Was ist noch flasch?

JTH
Moderator
Beiträge: 3023
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: Dateien mit rsync mit "älter als" abholen

Beitrag von JTH » 11.01.2023 00:20:02

find gibt hier, so wie es aufgerufen wird, die Dateien mit absolutem Pfad aus. Den durchsuchten Ordner muss man noch, für diese Anwendung, weglassen. Dafür könntest du dem find-Aufruf ein

Code: Alles auswählen

-printf '%f\n'
mitgeben, damit nur der Basename ausgegeben wird. Das reicht hier, weil du keine weiteren Ordner rekursiv durchgehen und synchronisieren willst.

Dafür musst du rsync wieder das

Code: Alles auswählen

EVIL_HOST:/var/xyz/blubb/
übergeben, damit es die Quelldateien anhand deren Basenames in dem Ordner sucht.
Manchmal bekannt als Just (another) Terminal Hacker.

Antworten