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?

Searene
quelle

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.

Takkat
quelle
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/
mivk
quelle