Backup mit rsync – Bestimmte(s) Unterverzeichnis(se) beim rekursiven Sichern [Option: -avP] ausschliessen?

iPhill

Aktives Mitglied
Thread Starter
Dabei seit
26.02.2011
Beiträge
9.960
Reaktionspunkte
4.008
Hallo allerseits!

Frage steht eigentlich schon in der Überschrift – die SuFu hat nur relativ alte oder eher komplexere Threads zu Tage gefördert, entsprechend erdreiste ich mich hiermit.
Ich will ein manuelles Backup der Userverzeichnisse eines Macs mit rsync anlegen. Das sieht aktuell so aus:

Code:
rsync -avP /users /ExternalHDD/BackupFolderAllUsers/

... da's aber eigentlich nur um die Daten-relevanten Unterordner Desktop, Documents, Downloads, Movies, Music & Pictures geht, soll für alle User (3 am betroffenen Mac) der jeweilige User-Library-Ordner von rsync ignoriert werden.
Wie mache ich das?
(Dass das grundsätzlich funktioniert, da bin ich mir jetzt so gut wie sicher.)

Besten Dank und liebe Grüße an euch alle!
iPhill


PS: Wenn ich bei künftigen Backups sicherstellen will, dass immer nur das auf der Externen ist, was auch auf der Quelle liegt, wie muss ich den Befehl dann anpassen?
 
hhmmm, da du alle User durchgehen willst, musst du mit sudo arbeiten. Ergo: teste es auf jeden Fall vorher ausgiebig. Der Parameter dafür ist -n

Da ich nicht weiß, ob du mit Links auf externe Datenträger / Volumes arbeitest, ergänze den Parameter -x Der bleibt auf dem aktuellen Volume

Fürs Auschließen lautet die Parameter-Syntax --exclude=PATTERN, wobei PATTERN gut durchdacht werden muss. Mehr dazu gibt die manpage von rsync her. Lies die auf jeden Fall.

Der Parameter fürs Löschen ist --delete, sinnvoll ist meist --delete-after, da im Falle eines Abbruches (warum auch immer) die überzähligen Files nicht vorschnell gelöscht wurden.

Ohne Gewähr für die Richtigkeit müsste es also wie folgt lauten

Bash:
sudo rsync -avxP -n --delete-after --exclude=/Users/*/Library/ /Users /externesVolume/Backupordner/

Wenn der Test die passende Ausgabe liefert, entferne das -n
 
  • Gefällt mir
Reaktionen: iPhill und win2mac
Hi @lisanet, danke dir für deinen ausführlichen Beitrag. Interessant.
Ich hatte auch noch ChatGPT gefragt und dabei die Antwort bekommen, dass mein Wunsch sich so umsetzen liesse:
Code:
rsync -avP --exclude='*/Library/' /users /ExternalHDD/BackupFolderAllUsers/
Begründung: "This command uses the --exclude option to ignore any subdirectories named "Library" within the "/users" directory. The */ before "Library" ensures that it matches any user's Library folder."

Wie unterscheiden sich dein (meines Verständnisses erweiterter) Vorschlag und jener von ChatGPT?
 
Ich muss jetzt aber nicht künftig irgendwelche ChatGPT-Ausgaben erklären und mich für meine Postings rechtfertigen, weil du ChatGPT mit einer Wissensdatenbank verwechselst? Das G steht für "generative" nicht für Wahrheit.

In Kürze:

Mein Befehl ist korrekt und entspricht dem was du wolltest.

Mein Pattern trifft ausschließlich für die User-Library zu. Das von dir _kann_ mehreres umfassen. Bsp /Users/iphill/xxxx/yyyy/zzz/Library Die Wirkungen der Pattern kannst du detailliert in der manpage nachlesen, warum dein Pattern eben mehr umfassen kann.

Und das mit dem -x habe ich erklärt.

Zudem entspricht der Befehl von dir nun überhaupt nicht dem, was du vor hattest, nämlich das Löschen von nicht mehr im Original vorhandener Daten. Auch das habe ich oben schon beschrieben.

Warum ich sudo verwende ist auch schon detailliert erläutert.

Edit:

je nach Formatierung deines Systems (bspw Groß/Klein) kann /users nicht zutreffen.

Das was man bei mir ergänzen muss und ich vergessen habe sind die quotes um das Pattern, wegen des *, was aber bei Test mit -n aufgefallen wäre
 
Zuletzt bearbeitet:
  • Wow
Reaktionen: iPhill
:eek: Hey, sicher nicht! So war's doch auf keinen Fall gemeint und das sollte die eigentlich neutral gehaltene Fragestellung auch implizieren. ;)

Ich hatte den Unterschied von Users/*/Library zu nur */Library nicht verstanden. So wie du's aber eklärst, ist es wohl so zu verstehen, dass der * nur für einen einzelnen Zwischen-Pfad-Schritt stehen kann. Dein "Users/*/Library" kann also nicht für z.B. Users/xy/z0/Library stehen sondern nur für eine einzige Zwischenebene des Verzeichnisses, korrekt?

Das mit -x erschliesst sich mir trotz deiner Erklärung oder einer Google Suche leider nicht. (manpage hatte ich dafür auch aufgerufen; kann aber mit der Info "-x berücksichtigt nur Objekte, die sich im selben Dateisystem befinden" nichts anfangen).

sudo scheint auch nichts genutzt zu haben, Ventura erlaubt leider das öffnen der Homeverzeichnisse der anderen User nicht (trotz sudo weiterhin mit Verbotsschild).

je nach Formatierung deines Systems (bspw Groß/Klein) kann /users nicht zutreffen.
Erschliesst sich.

Das was man bei mir ergänzen muss und ich vergessen habe sind die quotes um das Pattern, wegen des *, was aber bei Test mit -n aufgefallen wäre
Müsste also so aussehen?
Code:
sudo rsync -avxP -n --delete-after --exclude='/Users/*/Library/' /Users /externesVolume/Backupordner/
 
:eek: Hey, sicher nicht! So war's doch auf keinen Fall gemeint und das sollte die eigentlich neutral gehaltene Fragestellung auch implizieren. ;)
ok
Ich hatte den Unterschied von Users/*/Library zu nur */Library nicht verstanden. So wie du's aber eklärst, ist es wohl so zu verstehen, dass der * nur für einen einzelnen Zwischen-Pfad-Schritt stehen kann. Dein "Users/*/Library" kann also nicht für z.B. Users/xy/z0/Library stehen sondern nur für eine einzige Zwischenebene des Verzeichnisses, korrekt?

ja

Das mit -x erschliesst sich mir trotz deiner Erklärung oder einer Google Suche leider nicht. (manpage hatte ich dafür auch aufgerufen; kann aber mit der Info "-x berücksichtigt nur Objekte, die sich im selben Dateisystem befinden" nichts anfangen).

Legst du einen Link an, der bspw auf eine externe Platte zeigt, dann verhindert -x, dass dem Link gefolgt wird und die externe Platte gesynct wird. externe Platte = anderes Dateisystem

sudo scheint auch nichts genutzt zu haben, Ventura erlaubt leider das öffnen der Homeverzeichnisse der anderen User nicht (trotz sudo weiterhin mit Verbotsschild).

bei rsync gibt es kein "Verbotsschild". Wenn du sudo verwendest kann man definitv die anderen Verzeichnisse und deren Inhalt kopieren. Das dann natürlich diese Kopie die identischen Rechte aht ist doch gewollt. Du gibst -a an. Ergo: wenn du im Finder die Kopie ansehen willst, kannst du natrülich nicht in die Verzeichnisse anderer User gehen, da der Finder nicht sudo verwendet.
Müsste also so aussehen?
Code:
sudo rsync -avxP -n --delete-after --exclude='/Users/*/Library/' /Users /externesVolume/Backupordner/

zum testen ja.
 
  • Gefällt mir
Reaktionen: iPhill
Legst du einen Link an, der bspw auf eine externe Platte zeigt, dann verhindert -x, dass dem Link gefolgt wird und die externe Platte gesynct wird. externe Platte = anderes Dateisystem
Aber dann ist das doch eigentlich nicht gewollt (?). Angenommen, ich habe den User "iPhill", der "Pictures" besitzt und in Pictures liegt ein Link auf eine extern ausgelagert Photos-Mediathek.
Beim rsync Backup sollte die ja mitkopiert werden, wenn ich jetzt aber -x nutze, dann wird die ignoriert(?).
Kopie die identischen Rechte aht ist doch gewollt. Du gibst -a an
Yep, soweit einverstanden.
Ergo: wenn du im Finder die Kopie ansehen willst, kannst du natrülich nicht in die Verzeichnisse anderer User gehen, da der Finder nicht sudo verwendet.
... toll wäre halt, wenn irgendwie alle Verzeichnisse vom Admin für 'rsync' gelesen werden könnten. Auch die der anderen User, damit die Rechte irgendwie angepasst werden. So dass sich die 3 User-Verzeichnisse nach dem Backup an jedem x-beliebigen Mac ansehen lassen.
Hier scheint es aber, dank "-a" zur Unmöglichkeit zu kommen. Mai o mai, ich muss mich offenkundig nochmals mit der von mir intendierten (quasi)manuellen Backup-Strategie beschäftigen. :D

Danke dir @lisanet auf alle Fälle!! :)
 
Zurück
Oben Unten