Próbuję wykonać kopię zapasową mojego katalogu domowego za pomocą rsync i chcę wykluczyć niektóre katalogi zawierające śmieci. Chcę wyraźnie wykluczyć /home/ben/.ccache
i /home/ben/build
. Niestety dokumentacja rsync była przepełnieniem informacji i nie odpowiedziała na moje pytanie. Oto, co próbowałem:
rsync -arv --exclude "/home/ben/.ccache:/home/ben/build" /home/ben /media/ben/thumbdrive/
Jak to zrobić?
command-line
rsync
Freedom_Ben
źródło
źródło
a
sugerujer
:)-a, --archive archive mode; equals -rlptgoD (no -H,-A,-X)
Odpowiedzi:
OK, czuję się naprawdę głupio. Zanim opublikowałem to pytanie, mój przyjaciel pokazał mi, jak to zrobić i jest to naprawdę proste. Aby wykluczyć wiele katalogów, wystarczy użyć wielu
--exclude=path
przełączników. Więc moje powyższe polecenie poprawnie napisane jest następujące:źródło
-a
obejmuje,-r
więc-ar
jest zbędna.Jeśli masz wiele katalogów i / lub plików do wykluczenia, utwórz plik tekstowy i użyj
--exclude-from
przełącznika. Utwórz plik o nazwieexclude_me.txt
i umieść w nim listę swoich wykluczeń. Przykład (/home/ben/exclude_me.txt
):Wtedy twój rsync wyglądałby mniej więcej tak:
Oto kilka informacji na temat reguł filtrowania, które mogą pomóc:
/dir/
oznacza wyklucz folder główny/dir
/dir/*
oznacza pobierz folder główny,/dir
ale nie zawartośćdir/
oznacza wykluczenie dowolnego folderu w dowolnym miejscu, w którym znajduje się nazwadir/
Przykłady wykluczone:
/dir/, /usr/share/directory/, /var/spool/dir/ /var/spool/lpd/cf
oznaczają pomijanie plików rozpoczynających się odcf
dowolnego folderu w/var/spool/lpd
Zobacz także sekcję dotyczącą reguł filtrowania na stronie man.
źródło
Możesz także wykluczyć wiele ścieżek w nawiasach klamrowych:
źródło
IFS=$'\n'; rsync -arv $(printf '.ccache\nbuild\n' | sed 's/^/--exclude=/g') /home/ben /media/ben/thumbdrive/
. Możesz też użyć wielu--exclude
argumentów, które musisz wpisać ręcznie.