2013-02-01 11 views

Odpowiedz

15

Trzeba dodać --exclude wszystko i ma przyjść po --include

rsync -zvr --include="*.sh" --exclude="*" $from/* [email protected]$host:/home/tmp/ 
+0

Dobra uwaga na temat rekursji, @that. W systemie OS X okazało się, że wykluczenia muszą być zgodne z załącznikami. Myślałem, że ** znaleźć. -name '\ *. sh' | rsync -zvr --include-from = - --exclude = '*' ... ** działałoby, ale tak nie jest. – JohnQ

+3

Jak zauważyłem, odpowiedź @that jest lepsza, ponieważ potrzebujesz --include = "* /", aby dołączyć podkatalogi –

+0

Próbowałem tego i nie przekazuje żadnych danych. Próbowałem także użyć opcji exclude przed i po moich instrukcjach include, co daje taki sam wynik. –

13

--include jest za które pliki chcesz nie --exclude. Ponieważ nie wyłączyłeś żadnej z przyszłych argumentów, nie ma żadnego efektu. Można to zrobić:

from=/home/xxx 
rsync -zvr --include="*.sh" --include="*/" --exclude="*" "$from" [email protected]$host:/home/tmp/ 

rekursywnie skopiować wszystkie pliki .sh (dodatkowy --include aby nie pominąć katalogów, które mogą zawierać pliki .sh)

+2

jest to dobry sposób, a --include = "* /" jest obowiązkowe – Labynocle

+6

Myślę, że wykluczenie jest w niewłaściwym miejscu; powinno być po załącznikach. Rsync działa na pierwszym dopasowanym wzorze. – Hipponax43

+1

Hipponax43 ma rację: czy mógłbyś poprawić swoją odpowiedź, ponieważ ja i inni użytkownicy źle się bawiliśmy próbując użyć twojej niewłaściwej odpowiedzi – Bob

2

Na rzeczy dodać, przynajmniej na moich maszynach (FreeBSD OS X), to nie działa:

rsync -aP --include=*/ --include=*.txt --exclude=* * /path/to/dest 

ale to robi:

rsync -aP --include=*/ --include=*.txt --exclude=* . /path/to/dest 

Y es, wildcarding w bieżącym katalogu wydają się nadpisywać wykluczenie.

5

Naprawiłem zmieniającą --exclude = * problemu przez --exclude = *. *, rozumiem, że * wykluczyć folder, w którym zawierać pliki są.