2011-12-06 4 views
28

Chciałbym wziąć duży folder (~ 100 GB) i skopiować go do innego folderu. Chciałbym, aby pomijał wszystkie istniejące pliki (nie foldery), więc jeśli /music/index.html nie istnieje, nadal będzie kopiował, nawet jeśli katalog /music już istnieje.Skopiuj pliki, pomijając istniejące pliki - Unix

Znalazłem this, ale moja powłoka mówi, że -u nie jest prawidłowym argumentem.

Nie wiem, jak działa rsync, więc proszę dać mi znać, czy to lepsze rozwiązanie.

Dzięki.

+3

'rsync' to * zawsze * lepsze rozwiązanie. Tak, to * to * dobrze. –

+3

To pytanie prawdopodobnie powinno zostać przeniesione na http://unix.stackexchange.com/ – Bruno

+0

... lub też [su] –

Odpowiedz

50

Zawsze używaj rsync do kopiowania plików, ponieważ It Is Great.

Aby zignorować istniejące pliki:

rsync --ignore-existing --recursive /src /dst 

Do przeczytać manual i szukać od wielu, wielu świetnych przykładów. Zwłaszcza połączenie z ssh czyni rsync doskonałym narzędziem do powolnych i zawodnych połączeń z powodu opcji --partial. Dodaj --verbose, aby zobaczyć, które pliki są kopiowane. Koniecznie sprawdź również mnóstwo opcji dotyczących zachowania uprawnień, użytkowników i znaczników czasu.

+0

Czy jest to rekursywne czy muszę dodać '-r'? – switz

+1

Doskonale, już działa. Mogę powiedzieć, że działa działając w trybie pełnym ('-v'). Dzięki! – switz

+6

Aby pokazać postęp, gdy działa rsync, użyj: 'rsync --human-readable --progress --ignore-existing --recursive/src/dst' –

7

rsync(1) absolutnie świeci, gdy źródło i miejsce docelowe znajdują się na dwóch różnych komputerach. Jest to nadal lepsze narzędzie do wykorzystania, gdy źródło i miejsce docelowe znajdują się na tym samym komputerze.

prosty użycie wyglądałby następująco:

rsync -av /path/to/source /path/to/destination 

Jeśli masz pewność, że wszystkie pliki, które istnieją w obu lokalizacjach są identyczne, a następnie wybierz opcję --ignore-existing:

rsync -av --ignore-existing /path/to/source /path/to/destination 

Wystarczy dla kompletności, gdy używam rsync(1) do tworzenia kopii zapasowej w systemie zdalnym, komenda, którą najbardziej preferuję, to:

rsync -avz -P /path/to/source hostname:/path/to/destination 

-z prosi o kompresji (I nie przeszkadza lokalnie, ale na wolniejsze łącza sieciowego może zrobić wielką różnicę) i -P prosi o --partial i --progress - co spowoduje ponowne wykorzystanie częściowe transfer plików jeśli trzeba go zrestartować i pokaże przydatny wskaźnik paska postępu.