it-swarm.com.de

Fremde Dateien aus dem Verzeichnis dir über rsync löschen?

Sag ich habe

SRC 
  001.jpg
  002.jpg
  001.txt
  a.Zip

DEST
  hello.jpg

rsync -d --delete SRC:{*.jpg,*.txt} DEST

Es entfernt hello.jpg nicht aus DEST. Irgendeine Idee, wie man das archiviert?

51
Cheng

Der Grund, warum Ihr Befehl nicht funktioniert, wird durch Handbuchseite für rsync (Hervorhebung hinzugefügt) erklärt:

--löschen

Dadurch wird rsync angewiesen, fremde Dateien von der empfangenden Seite zu löschen (solche, die nicht auf der sendenden Seite liegen), jedoch nur für die Verzeichnisse, die synchronisiert werden. Sie müssen rsync gebeten haben, das gesamte Verzeichnis (z. B. "dir" oder "dir /") zu senden, ohne einen Platzhalter für den Inhalt des Verzeichnisses (z. B. "dir/*") zu verwenden, da der Platzhalter ist Durch die Shell erweitert und rsync erhält daher eine Anforderung zum Übertragen einzelner Dateien, nicht des übergeordneten Verzeichnisses der Dateien. Dateien, die von der Übertragung ausgeschlossen sind, werden ebenfalls vom Löschen ausgeschlossen, es sei denn, Sie verwenden - Option zum Ausschließen löschen oder markieren Sie die Regeln als nur auf der sendenden Seite übereinstimmend (siehe Modifikatoren zum Einschließen/Ausschließen im Abschnitt FILTERREGELN).

Also, wenn du rennst

$ rsync -d --delete SRC:{*.jpg,*.txt} DEST

die unerwünschten Dateien in DEST werden nicht gelöscht, da Sie nicht nach der Synchronisierung eines Verzeichnisses gefragt haben, sondern nur nach einer Handvoll bestimmter Dateien. Versuchen Sie Folgendes, um die gewünschten Ergebnisse zu erzielen:

rsync -d --delete-excluded --include '*.jpg' --include '*.txt' --exclude '*' SRC/ DEST/

Beachten Sie, dass die Reihenfolge der Einschluss- und Ausschlussrichtlinien von Bedeutung ist. Im Wesentlichen wird jede Datei in der Reihenfolge, in der sie angezeigt wird, mit den Einschluss- oder Ausschlussmustern verglichen. Daher werden Dateien mit den Erweiterungen .jpg oder .txt synchronisiert, da sie mit den "eingeschlossenen" Mustern übereinstimmen, bevor sie mit dem ausgeschlossenen "*" Muster übereinstimmen. Alles andere wird durch das Muster --exclude '*' Ausgeschlossen. Die Option --delete-excluded Stellt sicher, dass auch ausgeschlossene Dateien auf der DEST-Seite gelöscht werden.

73
Steven D