Newsgroup: it.comp.os.linux.sys
Titolo: rsync --exclude-file

Ciao
non riesco a capire "credo" la documentazione di rsync per quanto 
riguarda la gestione degli include e exclude.
In sostanza nel comando do come sorgente "/"
poi ho un file include dove per test ho inserito:
+ /root/
Gia pensavo, sbagliando, che leggendo questo avrebbe tralasciato il 
resto...
Cosi sono passato alla scrittura di un file di exclude che contiene 
tutte le voci che ho in radice precedute da "- "
Alle directory ho aggiunto uno "/" finale.
l'eccezione riguarda la voce:
- /root/non_toccarmi/
in modo da testare che mi venga copiato tutto cio' che ho in root ma non 
quella dir.
Diciamo che "funziona"... peccato che si ostina ad entrare in /dev
Dai log mi risulta che ci entra e tenta di copiare i file...
Ho letto una mail di un tizio sulla ml di rsync che sostiene che basta 
non mettere "/" a dev e tutto funziona, ma a me no.
Sbaglio io qualcosa?
Grazie
Christian

 peccato che si ostina ad entrare in /dev
Escludi dev, o magari dev/
Ti ricordo pure l'opzione per non farlo uscire da un filesystem:
opzione -x.
-- 
Bye, Lem
Ceterum censeo ISLAM esse delendum
__________________________________
Combatti l'AIDS col tuo computer: 
http://fightaidsathome.scripps.edu/
Monitora gli asteroidi col tuo computer: 
http://orbit.psi.edu/

 potevano farlo piu' "intelligente".
Bo', forse e' talmente un software complesso che sarebbe stato 
impossibile spiegarlo meglio.
Io sono uno che interpreta meglio dagli esempi che dallo scritto, cosa 
che a mio avviso manca quasi sempre nelle manpages :-/ (e quando c'e' 
non e' mai quello che ti serve :-D)
Grazie mille ;)
Christian

 esclusioni anche nel file da includere...
il file indicato in --exclude-from serve ad escludere, ma anche ad indicare
delle inclusioni, quindi quello che leggi sul manuale è giusto, - serve ad
indicare un'esclusione (ma può essere anche omesso, trattandosi di un
exclude file), + serve ad indicare un'inclusione.
nel tuo caso, se ho ben capito, vuoi sincronizzare /root escludendo una
directory e usando come path sorgente di rsync /.
scrivi allora nel file:
- /root/non_toccarmi/
- /root/non_toccarmi/**
+ /root
+ /root/**
- *
le prime due righe servono ad escludere la directory non_toccarmi/ e il suo
contenuto, comprese tutte le subdirectory. se ometti la prima riga verrà
copiata nella destinazione la dir non_toccarmi vuota.
le ulteriori due righe invece includono nella sincronizzazione /root e il
suo contenuto.
l'ultima riga esclude tutto il resto

  /root/blabla/
No, non mi funziona :-(
esclude sempre tutto
il che lascia pensare che "- *" lo legga :-D
Io ho aggiunto l'opzione -R --relative per darmi un punto di riferimento
3ç esempio del paragrafo "ANCHORING INCLUDE/EXCLUDE PATTERNS del man
(ho scoperto l'opzione -n dry run che fa solo finta di eseguire... 
figata :-D )
Ho scoperto che il file di include non se lo fila per nulla (sia dando 
il + che omettendolo)
alche' ho aggiunto nel mio script un sorgente dopo il sorgente.
Non credo sia il sistema corretto, ma cmq funziona
La stessa lista di exclude viene passata dall'alto al basso per ogni 
sorgente, di conseguenza le esclusioni che possono combaciare con un 
sorgente non lo fanno con un altro, dando origine appunto al risultato 
voluto.
Alla fine mi sa che esistono modi differenti per ottenere lo stesso 
risultato.
Christian


il comando che uso è:
rsync -av --exclude-from=exclude.list / host:/destinazione
exclude.list contiene quello che ti ho scritto prima.
la mia versione di rsync è la 3.0.0 su sorgente e 2.6.9 su destinazione.
qui funziona, viene copiata tutta /root tranne /root/non_toccare e
nient'altro.

 exclude.list contiene quello che ti ho scritto prima.
anzi, puoi scriverlo più succintamente così, almeno se hai un rsync =>
2.6.7:
- /root/non_toccarmi/***
+ /root/***
- *

 viene stampata ...cioe' senza slash iniziale ;)
il man non sarà chiarissimo, ma qualcosa sui pattern c'è scritto.

 come vedi, con rsync 2.6.9, *non* funziona.
vedo altro 

ci sono ci sono!
Ho risolto, grazie ad entrambe.
Sono certo comunque che si possono ottenere gli stessi risultati con 
sistemi diversi.
(troppa liberta' fa male... :-D )
Intanto la lista di exclude (o include) viene processata dall'alto al 
basso e ha priorita', MA, non basta scrivere i percorsi che si 
necesitano, ma bisogna dare la possibilita' di leggere i percorsi.
Esempio:
voglio backup di /var/log
se scrivo:
+ /var/log/
- *
non funziona
devo dare:
+ /var/
+ /var/log/***
- *
(Ovviamente questo e' uno dei modi)
e verra' copiata SOLO la var/log
La discussione sui path poi mi pare ancora piu complessa, perche' 
dipende anche dall'opzione -R --relative
oltretutto non ho capito (ma ne faccio anche a meno) se si omette lo "/" 
iniziale potrebbe essere che se io escludo tipo:
- config/
si finisce che vengono scartate anche le dir "config" in altri posti (se 
esistono)
Ad ogni modo, con questo sistema sono ormai in grado di escludere e 
includere quello che mi serve, e il tocco finale del "- *" mi evita di 
dover scrivere tutte le dir, che per carita' non era faticoso, ma mi 
sembrava un tantinello strano.
Grazie mille,
senza dubbio da solo non ci sarei arrivato.
(in effetti il man avrei dovuto leggerlo tutto e non a pezzi)
Christian
P.s.
Spero di non dover ripostare per dovermi rimangiare le parole :-P

 # rsync -avprh --rsh=ssh --progress --timeout=5 --exclude-from=/esclusione.txt --dry-run /var/cache/apt/archives/ yalta:/var/cache/apt/archives/
Questo non funzionerà mai, perché ogni path da escludere che cominci
con / comunque si riferisce alla "root of the transfer", che nel tuo
caso è /var/cache/apt/archives/, e non alla directory root del
sistema.
Prova invece ad escludere /lock/var/cache/apt/archives/partial, colla
/ davanti.
Se la "root of the transfer" è proprio /, naturalmente il problema
non si pone, e path assoluti sono proprio assoluti rispetto alla
root.


 # rsync -avprh --rsh=ssh --progress --timeout=5 --exclude-from=/esclusione.txt --dry-run /var/cache/apt/archives/ yalta:/var/cache/apt/archives/
Questo non funzionerà mai, perché ogni path da escludere che cominci
con / comunque si riferisce alla "root of the transfer", che nel tuo
caso è /var/cache/apt/archives/, e non alla directory root del
sistema.
Prova invece ad escludere /lock e /partial, colla


 come vedi continua a funzionare *solo* con i path relativi.
mi dispiace, non mi lasci altra scelta... :-(
RTFM

 
non ho dubbi, infatti non ti ho mai detto che così funziona. te lo sei messo
in testa tu, stai facendo tutta 'sta fatica per una cosa della quale ti sei
autoconvinto.
parliamo di pattern, non di percorsi.
RTFM, fai prima.

 
mi spieghi perché continui a ripetere ossessivamente che non si possono
usare path assoluti?
ho cercato di convincerti ad usarli?
mi sembra di averti ripetuto più volte che non ho mai affermato una cosa del
genere, anzi, ti ho detto che il manuale parla di pattern e non di path. e
per questo ti ripeto che è meglio se lo leggi tutto, il manuale.
ti ho mai scritto "devi usare /a/b/c/d/e/f" o "devi
usare /var/cache/apt/archives/lock"?
non mi pare, quindi deve essere un'ossessione tua. non so cosa ti abbiano
fatto di male questi path assoluti, ma non li ho mandati io.
in questo caso, se non ti dispiace, ti lascio a sbrigartela da solo.