Wie kann ich Dateien in rsync ausschließen?


12

Ich verwende Ubuntu Server 12.04. Jetzt möchte ich einige Dateien mit rsync sichern. Hier ist ein Versuch:

rsync -aAX $HOME/Documents/* $HOME/Backups/TEST --exclude={$HOME/Documents/another/*,$HOME/Documents/temp/*} 

Wie Sie sehen können, möchte ich alle Dateien in dem Ordner Backup $ HOME / Dokumente in dem Ordner $ HOME / Backups / TESTS , aber ausschließen Dateien in Ordner eines anderen und Temp . Aber ich bin gescheitert, rsync kopierte immer noch die Dateien in beide ausgeschlossenen Ordner:

ls $HOME/Backups/TEST/another
test

test ist eine datei im ordner eine andere und wird auch kopiert obwohl ich die datei in rsync ausschliesse, warum? Wie lassen sich diese Dateien tatsächlich ausschließen?

Antworten:


11

Es gibt verschiedene Probleme mit Ihrem Befehl rsync (eine ausführliche Erläuterung der Filterregeln finden Sie auf der Manpage für rsync ).

  • Wir brauchen jeweils einen --excludeBefehl für ein bestimmtes Muster.
  • Die angegebenen Pfade müssen relativ zum Quellpfad sein (keine absoluten Pfade).
  • Optionen müssen angegeben werden, bevor wir Quelle und Ziel angeben.

Für Ihr Beispiel funktioniert die folgende Syntax:

rsync -avAX --exclude=another/ --exclude=temp/ ~/Documents/ ~/Backups/TEST

Beachten Sie, dass, wenn ein Ausschlussmuster damit endet, /es sich auf ein Verzeichnis bezieht. Wenn Sie beide weglassen, werden Dateien und Verzeichnisse mit diesem Namen ausgeschlossen. Ersetzen Sie es durch einen Platzhalter *, um alle Dateien oder Verzeichnisse mit dieser Zeichenfolge in ihren Namen auszuschließen.


6
Das ist nicht ganz richtig. Ich bin nicht sicher, wie es funktioniert, aber vom Experimentieren --exclude=/foowird das Verzeichnis foodirekt in der Quelle ausgeschlossen, aber --exclude=fooalle Verzeichnisse mit dem Namen foo werden ausgeschlossen, auch in Unterverzeichnissen.
Sparhawk

10

Möglicherweise ist es einfacher, .rsync-filterDateien in Ihre Quellverzeichnisse einzufügen und die -FOption zu verwenden.

Von der Manpage:

-F: Die Option -F ist eine Abkürzung [...] für diese Regel:

 --filter='dir-merge /.rsync-filter'

Dies weist rsync an, nach verzeichnisbezogenen .rsync-Filterdateien zu suchen, die durch die Hierarchie gestreut wurden, und ihre Regeln zu verwenden, um die Dateien in der Übertragung zu filtern.

Zum Beispiel: in $ HOME / Documents / .rsync-filter

# you can add comments in filter files

- /another/
- /temp/

Stattdessen -können Sie auch das ganze Wort schreiben exclude.

Jetzt kannst du

rsync -aAX -F $HOME/Documents/ $HOME/Backups/TEST/
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.