Nur bestimmte symbolische Links mit rsync kopieren?

Nur bestimmte symbolische Links mit rsync kopieren?

Ich habe eine Ordnerstruktur, die ich mit rsync kopieren möchte. Die Struktur besteht aus einer Reihe von Sicherungen, von denen ich nur die neuesten kopieren möchte (die anhand eines symbolischen Links identifiziert werden können), und zwar etwa so:

/backups
    /foo
        /2019-05-01
        /2019-06-01
        /latest -> 2019-06-01
    /bar
        /2019-05-20
        /2019-06-20
        /latest -> 2019-06-20

Und so weiter. Ich möchte mit einem einzigen rsync-Befehl kopierennurdas latestBackup aus jedem Ordner, während die Struktur ansonsten nachgeahmt wird. Zu diesem Zweck habe ich mir den folgenden Befehl ausgedacht:

rsync -rptgoDLm --include '*/' --include '/*/latest/**' --exclude '*' user@remote:/backups /some/local/path

Im Grunde ein Archiv mit --copy-linkseinigen Include/Exclude-Tricks, um nur die /*/*/latestZweige auszuwählen (und -mum eine Menge leerer Verzeichnisstrukturen zu vermeiden). Das funktioniert gut, bis auf ein Problem: Wenn einer dieser Zweige symbolische Links enthält, werden diese auch als ihre Ziele kopiert und nicht nur als einfache symbolische Links.

Was ich wirklich können muss, istnurVerwenden Sie --copy-linksdas Verhalten mit den symbolischen Links, und verwenden Sie für alle anderen gefundenen Links latestein anderes Verhalten (z. B. das von ).--links

Ist so etwas mit einem einzigen rsync-Befehl möglich? Mein Ziel ist es, dies ausführen zu können, ohne den unmittelbaren Inhalt kennen zu müssen /backups, sodass, wenn ich etwas Neues hinzufüge (z. B. /backups/baz), es automatisch kopiert wird.

Aktualisieren: Zur Verdeutlichung wäre die resultierende Verzeichnisstruktur, die ich am Ziel sehen möchte, folgende:

/backups
    /foo
        /latest
    /bar
        /latest

Ich benötige beispielsweise nur die neueste Version jedes Backups auf dem Ziel (das Ziel selbst verwaltet den Backup-Verlauf auf andere Weise).

Antwort1

Dies scheint Ihren Anforderungen zu entsprechen

rsync -avR user@remote:'/backups/*/latest/' /some/local/path/

Das -RFlag „kopiert“ effektiv den gesamten Quellpfad in das Ziel und die resultierenden Backups landen als /some/local/path/backups/{whatever}/latest.

Wenn Sie nicht den gesamten Quellpfad benötigen, können Sie /./angeben, von wo aus der Pfad zum Ziel kopiert werden soll. Dies würde beispielsweise /backups/./foo/latest/zu folgendem Ergebnis führen /some/local/path/foo/latest/(d. h. die /backupsKomponente wurde übersprungen). In der Dokumentation ( ) finden Sie viele weitere Einzelheiten man rsync.

verwandte Informationen