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?

Searene
źródło

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.

Takkat
źródło
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/
mivk
źródło