rsync kann nicht leere Verzeichnisse nicht löschen


10

Beim Synchronisieren meiner Remote-Sicherung wird der Fehler angezeigt rsync cannot delete non-empty directory.

Ich kenne die Ursache: Ich habe einige Dateien ausgeschlossen und wenn rsync versucht, ein Remote-Verzeichnis zu löschen, weil es lokal nicht vorhanden ist, kann es nicht, da es nicht leer ist. Ohne den Ausschluss würde das Verzeichnis geleert.

Ich weiß auch, dass ich das Problem durch die Verwendung von --delete-ausgeschlossen beseitigen könnte, aber das will ich nicht.

Ich möchte das Hochladen bestimmter Dateien überspringen (weil sie für meine Upload-Geschwindigkeit zu groß sind), aber ich möchte die Dateien beibehalten, die ich vor einiger Zeit bereits hochgeladen habe, wenn sie lokal vorhanden sind . Wenn sie lokal nicht vorhanden sind, sollten sie gelöscht werden. --delete-ausgeschlossen würde sie alle auf der Remote-Seite löschen.

Das bedeutet auch, dass ein Verzeichnis, das lokal nicht mehr existiert, auch dann gelöscht werden sollte, wenn es ausgeschlossene Dateien enthält.

Ist es möglich, rsync einzurichten, um dies zu erreichen?

Antworten:


5

Verwenden Sie den pModifikator:

Ein p zeigt an, dass eine Regel verderblich ist, was bedeutet, dass sie in Verzeichnissen, die gelöscht werden, ignoriert wird. Beispielsweise werden die Standardregeln der Option -C, die Dinge wie "CVS" und "* .o" ausschließen, als verderblich markiert und verhindern nicht, dass ein in der Quelle entferntes Verzeichnis am Ziel gelöscht wird.

Zum Beispiel verwende ich die -FOption, die "rsync anweist, nach .rsync-Filterdateien pro Verzeichnis zu suchen, die durch die Hierarchie gestreut wurden, und ihre Regeln verwendet, um die Dateien in der Übertragung zu filtern."

Meine .rsync-filterenthält Zeilen wie diese, um diesen "Kot" herauszufiltern, den Macs hinterlassen:

-p .DS_Store
-p ._*

Wenn Sie excludestatt nur verwenden -, fügen Sie ein Komma hinzu. Beispielsweise :

exclude,p .DS_Store
exclude,p Thumbs.db

0

Sie können Modifikatoren für Einschluss- / Ausschlussmuster und Add-S für das von Ihnen verwendete Muster verwenden. Es teilt rsync mit, dass die Ausschlussregel nur für die Sendeseite gilt.

-n: Überprüfe nur, was beim Abstieg gelöscht wird, lösche nicht das Muster: * .sh desc: / home / kg / tmp

Ziel: Sie möchten das Dateiende von .sh bei desc löschen. Wenn Sie dies tun, können Sie jedoch nicht bei desc löschen: rsync -rvz --exclude * .sh --delete -n conkg kg@192.168.31.202: / home / kg / tmp

sollte sich ändern zu: Bitte fügen Sie -n hinzu, wenn Sie den Test testen: rsync -rvz --exclude-from del.txt -n --delete conkg kg@192.168.31.202: / home / kg / tmp real delete: rsync -rvz - exclude-from del.txt --delete conkg kg@192.168.31.202: / home / kg / tmp cat del.txt -s * .sh

oder: rsync -rvz --exclude -s * .sh --delete conkg kg@192.168.31.202: / home / kg / tmp


-2

Verwenden Sie einfach die Optionen '--max-size = xx' und '--delete' von rsync. Es erledigt alles automatisch und erfüllt alle Ihre Anforderungen.


Es wäre höchstens eine Problemumgehung. Ich möchte mov-, avi- und cr2-Dateien komplett überspringen, da sie im Allgemeinen sehr groß sind. Aber diejenigen, die ich vor einiger Zeit bereits in einer schnelleren Zeile hochgeladen habe, sollten beibehalten werden. Das Problem ist nun, dass die größten JPG-Dateien größer sind als die kleinsten CR2-Dateien, sodass diese Lösung nicht ideal ist. Ich würde lieber die Ausschlussfunktion verwenden, um nach Dateinamen zu filtern.
Marlar
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.