Jak wykluczyć pliki w rsync?


12

Używam serwera Ubuntu 12.04, teraz chcę wykonać kopię zapasową niektórych plików przy użyciu rsync, oto próba:

rsync -aAX $HOME/Documents/* $HOME/Backups/TEST --exclude={$HOME/Documents/another/*,$HOME/Documents/temp/*} 

Jak widać, chcę wykonać kopię zapasową wszystkich plików w folderze $ HOME / Dokumenty do folderu $ HOME / Kopie zapasowe / TEST , ale wykluczyć pliki w folderze innym i temp . Ale mi się nie udało, rsync nadal kopiuje pliki w obu wykluczonych folderach:

ls $HOME/Backups/TEST/another
test

test jest plikiem w folderze innym , i jest również kopiowany, chociaż wykluczam plik w rsync, dlaczego? Jak zezwolić na faktyczne wykluczenie tych plików?

Odpowiedzi:


11

Istnieje kilka problemów z poleceniem rsync ( szczegółowe informacje na temat reguł filtrowania można również znaleźć na stronie podręcznika rsync )

  • potrzebujemy --excludepolecenia dla każdego wzorca.
  • podane ścieżki muszą być względne do ścieżki źródłowej (bez ścieżek bezwzględnych).
  • należy podać opcje, zanim podamy źródło i cel.

W twoim przykładzie zadziała następująca składnia:

rsync -avAX --exclude=another/ --exclude=temp/ ~/Documents/ ~/Backups/TEST

Zauważ, że jeśli wzorzec wykluczania kończy się na /tym, odnosi się do katalogu. Pominięcie zarówno plików, jak i katalogów o tej nazwie zostanie wykluczone. Zamień go na symbol wieloznaczny, *aby wykluczyć wszystkie pliki lub katalogi z tym ciągiem w ich nazwach.


6
To nie jest do końca poprawne. Nie jestem pewien, jak to działa, ale z eksperymentów --exclude=/foowykluczy katalog foobezpośrednio w źródle, ale --exclude=foowykluczy wszystkie katalogi o nazwie foo, nawet w podkatalogach.
Sparhawk

10

Możesz łatwiej dodawać .rsync-filterpliki do katalogów źródłowych i korzystać z tej -Fopcji.

Ze strony podręcznika:

-F: Opcja -F jest skrótem [...] dla tej reguły:

 --filter='dir-merge /.rsync-filter'

To mówi rsync, aby szukał plików .rsync-filter dla poszczególnych katalogów, które zostały posypane przez hierarchię i używają ich reguł do filtrowania plików w transferze.

Na przykład: w $ HOME / Documents / .rsync-filter

# you can add comments in filter files

- /another/
- /temp/

Zamiast tego -możesz także napisać całe słowo exclude.

Teraz możesz

rsync -aAX -F $HOME/Documents/ $HOME/Backups/TEST/
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.