2015-02-10 11 views
13

Chcę skopiować wszystkie pliki z serwera A do serwera B, które mają ten sam nadrzędny Directory nazwy w różnych poziomach hierarchii systemu plików, np:Jak synchronizować pliki z pasującym wzorcem w ścieżce, zachowując nienaruszoną strukturę katalogów?

/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 

Chcę skopiować pierwsze trzy pliki, które wszyscy mamy commonname w ścieżce do serwera B. Już spędziłem dużo czasu na znajdowaniu poprawnych wzorów włączania/wykluczania dla rsync, ale nie dostaję tego. Poniższe polecenie nie działa:

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

Albo pasuję do zbyt wielu, albo do kilku plików. Jak mogę zsynchronizować tylko pliki z numerem commonname na swojej ścieżce?

+1

Powinieneś zapytać o to na [Unix i Linux] (http://unix.stackexchange.com/) stackexchange lub [ServerFault] (http://serverfault.com/). –

Odpowiedz

23

Chyba szukasz to:

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

Są 2 różnice z Twojego polecenia:

  • Najważniejszym z nich jest --include='*/'. Bez tego, jak podano, --exclude='*', rsync nigdy nie wejdzie do podkatalogów, ponieważ wszystko jest wykluczone. Z --include='*/' podkatalogi nie są już wykluczone, więc rsync może z powodzeniem wycofywać się.
  • Najmniej ważnym z nich jest -m: ten przycina puste katalogi. Bez tego można również skopiować (pusty) podkatalog /var/lib/data/sub3/sub4/differentname/.
+0

Dziękuję, działa idealnie! – murks

Powiązane problemy