rsync non può cancellare la directory non vuota


10

Quando sincronizzo il mio backup remoto ottengo l'errore rsync cannot delete non-empty directory.

Conosco la causa: ho escluso alcuni file e quando rsync tenta di eliminare una directory remota perché non esiste localmente, non può poiché non è vuota. Senza l'esclusione, la directory verrebbe svuotata.

So anche che potrei sbarazzarmi del problema usando --delete-excluded, ma non è quello che voglio.

Vorrei saltare il caricamento di determinati file (perché sono troppo grandi per la mia velocità di upload), ma voglio conservare quelli che ho già caricato qualche tempo fa se esistono localmente . Se non esistono localmente, devono essere eliminati. --delete-excluded li eliminerebbe tutti sul lato remoto.

Ciò significa anche che se una directory non esiste più localmente, dovrebbe essere eliminata anche se contiene file esclusi.

È possibile configurare rsync per ottenere questo risultato?

Risposte:


5

Usa il pmodificatore:

Una p indica che una regola è deperibile, il che significa che viene ignorata nelle directory che vengono eliminate. Ad esempio, le regole predefinite dell'opzione -C che escludono elementi come "CVS" e "* .o" sono contrassegnate come deperibili e non impediranno che una directory rimossa sull'origine venga cancellata sulla destinazione.

Ad esempio, utilizzo l' -Fopzione, che "dice a rsync di cercare i file .rsync-filter per directory che sono stati cosparsi nella gerarchia e usare le loro regole per filtrare i file nel trasferimento".

Il mio .rsync-filtercontiene righe come queste per filtrare questi "escrementi" che i Mac lasciano dietro di loro:

-p .DS_Store
-p ._*

Se si utilizza excludeinvece di solo -, aggiungere una virgola. Per esempio :

exclude,p .DS_Store
exclude,p Thumbs.db

0

Puoi usare modificatori del modello include / exclude, add -s sul pattern che hai usato. Indica a rsync che esclude la regola solo per il lato di invio.

-n: controlla solo cosa verrà eliminato su desc, non cancellare pattern: * .sh desc: / home / kg / tmp

obiettivo: si desidera eliminare il file fine di .sh su desc, ma se si esegue questa operazione, non è possibile eliminare su desc: rsync -rvz --exclude * .sh --delete -n conkg kg@192.168.31.202: / home / kg / tmp

dovrebbe essere modificato in: per favore aggiungi -n quando esegui il test: rsync -rvz --exclude-from del.txt -n --delete conkg kg@192.168.31.202: / home / kg / tmp real delete: rsync -rvz - exclude-da del.txt - elimina conkg kg@192.168.31.202: / home / kg / tmp cat del.txt -s * .sh

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


-2

basta usare le opzioni '--max-size = xx' e '--delete' di rsync. Farà tutto automaticamente e soddisferà tutte le vostre esigenze.


Sarebbe al massimo una soluzione alternativa. Voglio saltare completamente i file mov, avi e cr2 perché in genere sono molto grandi. Ma quelli che ho già caricato su una linea più veloce qualche tempo fa dovrebbero essere mantenuti. Ora il problema è che i file JPG più grandi sono più grandi dei file CR2 più piccoli, quindi questa soluzione non è l'ideale. Preferirei utilizzare la funzione di esclusione per filtrare i nomi dei file.
marzo
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.