Używam Fedory 17 64-bit i rsync --exclude=/home/ben/<dir>
nie działa zgodnie z oczekiwaniami.
Próbuję z rsync
mojego katalogu domowego na pamięć USB, ale z pewnością chcę wykluczyć katalogi, które przechowują pliki pamięci podręcznej i budują pliki. Oto polecenie, którego używam:
rsync --exclude=/home/ben/build/ --exclude=/home/ben/.ccache -arv /home/ben home-ben/
Jednak treść z ~/build
i ~/.ccache
jest kopiowana przez rsync
. Co ja robię źle?
Odpowiedzi:
Globalne
rsync
reguły filtrów rozpoczynające się od wiodącego/
są zakotwiczone w rdzeniu transferu. Cytując z sekcji „OBEJMUJ / WYŁĄCZ ZASADY WZORU” strony podręcznika:W twojej komendzie (
rsync ... -arv /home/ben home-ben/
) plik/home/ben/foo
zostanie przeniesiony dohome-ben/ben/foo
. Podstawą transferu jest,home-ben
a poprawna ścieżka filtru to/ben/foo
. A zatem,/home/ben/.ccache
potrzebujesz ścieżki filtru/ben/.ccache
/home/ben/build/
potrzebujesz ścieżki filtru/ben/build/
Bardziej szczegółowe wyjaśnienie można znaleźć w sekcji „KOTWICZANIE OBEJMUJ / WYKLUCZ WZORY” na
rsync(1)
stronie podręcznika .Pamiętaj, że zwykłe pominięcie wiodącej pozycji
/
niekoniecznie jest tym, czego chcesz. Cytując ponownie z tej samej sekcji strony podręcznika:Zatem wzór filtr
build/
będzie pasował do nigdzie w katalogu build/home/ben
, nawet/home/ben/many/sub/directories/build/
.źródło
rsync -a source destination
skopiuje katalog źródłowy do miejsca docelowego. Określa to, czym będzie rdzeń przeniesienia, aby poinformować wyrażenie wykluczające. Właściwe użycie / w wyrażeniu wykluczającym jest następnie wyjaśnione powyżej. Zwróć uwagę, żersync --exclude='/dir1' source destination
to niczego nie wyklucza.Myślę, że twoje
exclude
ścieżki muszą być względne względem ścieżki źródłowej. Możesz zamiast tego spróbować?Oto test do porównania:
źródło
--verbose
pokazuje wynik polecenia, to format, którego musisz użyć.Miałem ten problem w skrypcie (nie wiem, czy to twoja sprawa). Byłem, ponieważ użyłem tego polecenia w skrypcie i użyłem sh zamiast bash. sprawdź shebang na początku skryptu.
źródło
Wzorzec wykluczenia działałby, gdybyś zsynchronizował całą ścieżkę / home, tj. Bez końcowego ukośnika:
Ale lepiej tylko synchronizować zawartość folderu z ukośnikiem:
Możesz również użyć listy ignorowanych, patrz: https://askubuntu.com/questions/545655/backup-your-home-directory-with-rsync-and-skip-useless-folders
źródło
Aby wykluczyć folder specif za pomocą rsync, należy rozważyć ścieżkę względną w poleceniu. w twoim przypadku:
gdzie „ben” to folder, który synchronizujesz
źródło