Come escludere una cartella da rsync


60

Sto cercando di eseguire il backup della mia cartella principale sul mio disco NAS. Sto dando questo:

rsync -Paz --exclude-from 'rsync-exclude.txt' /home/chris/ admin@192.168.1.65:LinuxHome

dove rsync-exclude.txtha questo contenuto:

/home/chris/Downloads/*
/home/chris/Downloads/
/home/chris/Downloads/*.*

ed è nella stessa cartella che eseguo rsync (cartella home).

Tuttavia, rsync tenta di copiare anche questa cartella.

Che cosa sto facendo di sbagliato?

Risposte:


88

Stai fornendo percorsi assoluti nel tuo elenco di esclusioni.

Con rsync, tutti i percorsi di esclusione (o inclusione!) Che iniziano con /sono ancorati alla " radice del trasferimento ".

La radice del trasferimento in questo caso è /home/chris. Se avete fatto:

rsync -Paz --exclude-from 'rsync-exclude.txt' / admin@192.168.1.65:

... allora le tue esclusioni dovrebbero funzionare (ma dovresti copiare tutto il resto su quel filesystem!).

Ma dal momento che stai solo cercando di sincronizzare la tua home directory e non esiste una sottodirectory di /home/chrisnamed "home/chris/Downloads", rsyncnon trova nulla che corrisponda.

Quindi prova a rimuovere le /home/chrisparti dal tuo rsync-exclude.txtfile.

In realtà, dovresti solo aver bisogno di una sola riga nel file:

/Downloads

Nota che se non specifichi il lead /e ti capita di avere altre directory nominate "Downloads", anche quelle sarebbero escluse. Presumo che tu voglia solo escludere la tua directory "di livello superiore" (relativa alla directory di origine, nota anche come "radice del trasferimento") Downloads, quindi vorrai il comando principale /.

IL MODO PIÙ SEMPLICE (per escludere solo alcuni percorsi)

Se hai solo bisogno di escludere una directory, fai semplicemente questo (evitando un file separato):

rsync -Paz --exclude /Downloads /home/chris/ admin@192.168.1.65:LinuxHome

Puoi anche concatenare i --excludetag in questo modo:

rsync -Paz --exclude /Downloads --exclude '/Something Else' --exclude .hiddenFile /home/chris/ admin@192.168.1.65:LinuxHome

Si noti che poiché non c'è barra, che si escluderà .hiddenFileda eventuali ogni directory si copia!

Ma se hai più di qualche esclusione, stai meglio con --exclude-frome un file.

Nota

Vedo che hai capito bene, ma quelli nuovi di rsync dovrebbero notare la barra alla fine di/home/chris/

Per citare la rsyncpagina man, "Puoi pensare a un trailing / su una fonte come" copia il contenuto di questa directory "anziché" copia la directory per nome "."

Quindi, se si interrompesse quella barra finale, si finirebbe con una directory chiamata chrisall'interno della directory di destinazione, contenente tutto /home/chris(tranne la Downloadsdirectory originale , ovviamente!).


2

Questo potrebbe essere più facile per gli occhi e solo una nota sull'esclusione di directory e sintassi:

SRC='/home/username'
DST='/run/media/username/EasyStoreRT/rsync'

rsync -avrh --stats                                 \
    --log-file=/home/username/log/rsync-home.log    \
    --exclude='/username/.cache'                    \
    --exclude='/username/.local/share/Trash'        \
    $SRC \
    $DST \

Escluderà quelle directory e tutti i file al loro interno. Per qualunque motivo, rysnc non stava aggiungendo / home / nome utente a /.cache. Solo home / si ancorerebbe, quindi ho dovuto aggiungere / username a ciascuna directory esclusa.

Le pagine man dicono: "se il modello inizia con un / allora è ancorato ad un punto particolare nella gerarchia dei file, altrimenti è abbinato alla fine del nome del percorso". Ma quella gerarchia sembra essere solo la prima directory nella directory di origine. Sto usando bash, versione 4.4.23 (1) -release.

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.