2015-02-10 10 views
13

voglio copiare tutti i file dal server A al server B che hanno lo stesso genitore nome-directory in diversi livelli di gerarchia del filesystem, ad esempio:Come rsync i file con lo schema corrispondente nel percorso mantenendo intatta la struttura della directory?

/var/lib/data/sub1/sub2/commonname/filetobecopied.foo 
/var/lib/data/sub1/sub3/commonname/filetobecopied.foo 
/var/lib/data/sub2/sub4/commonname/anotherfiletobecopied.foo 
/var/lib/data/sub3/sub4/differentname/fileNOTtobecopied.foo 

voglio copiare le prime tre file che tutti hanno la commonname nel percorso verso il server B. Ho già trascorso molto tempo a trovare i modelli di inclusione/esclusione corretti per rsync ma non lo capisco. Il seguente comando non funziona:

rsync -a --include='**/commonname/*.foo' --exclude='*' [email protected]:/var/lib/data /var/lib/data 

Io abbino troppo o ad alcuni file. Come posso sincronizzare solo i file con il commonname nel suo percorso?

+1

Probabilmente dovresti chiedere questo su [Unix & Linux] (http://unix.stackexchange.com/) stackexchange o su [ServerFault] (http://serverfault.com/). –

risposta

23

immagino che stai cercando questo:

rsync -a -m --include='**/commonname/*.foo' --include='*/' --exclude='*' [email protected]:/var/lib/data /var/lib/data 

Ci sono 2 differenze con il vostro comando:

  • La più importante è --include='*/'. Senza questo, come specificato --exclude='*', rsync non entrerà mai nelle sottodirectory, poiché tutto è escluso. Con --include='*/', le sottodirectory non sono più escluse, quindi rsync può essere felicemente reclamato.
  • Il meno importante è -m: questo elimina le directory vuote. Senza questo, si otterrebbe anche la sottodirectory (vuota) /var/lib/data/sub3/sub4/differentname/ copiata.
+0

Grazie, funziona perfettamente! – murks

Problemi correlati