Muszę skopiować folder / home / użytkownika z jednego dysku twardego na inny. Ma 100 000 plików i rozmiar około 10G.
używam
cp -r /origin /destination
czasami dostaję błędy z powodu zepsutych linków, uprawnień i tak dalej. Naprawiam więc błąd i muszę zacząć od nowa.
Zastanawiam się, jak mogłem powiedzieć komendę „cp”, gdy spróbuje ponownie skopiować, aby nie kopiować plików, jeśli istnieją w folderze docelowym.
Odpowiedzi:
cp -R -u -p /source /destination
Flaga
-u
( lub--update
) właśnie to robi:Ze strony podręcznika użytkownika dla cp:
źródło
yes n | cp -i /source/* /destination 2>/dev/null
Po prostu użyj
cp -n <source> <dest>
.Ze strony podręcznika :
źródło
rsync -aq /src /dest
Oprócz kopiowania tylko nowszych plików, skopiuje nawet nowsze części plików, jeśli plik się zmienił. Jest przeznaczony do kopiowania przez łącza sieciowe, w których chcesz zminimalizować ilość danych - ale działa również świetnie lokalnie.
źródło
Wyszukaj opcję „-u” dla
cp
polecenia.źródło
Wszystkie powyższe odpowiedzi są poprawne, ale jeśli robisz to rekurencyjnie, to
powinieneś zrobić:
źródło
Powinieneś kopiować jako root, aby zachować uprawnienia / własność
Zobacz także rsync
źródło
Rozwiązanie POSIX
Inne odpowiedzi wykorzystują
-u
lub-n
opcjecp
. Żadne z nich nie jest wymagane przez POSIX ; ani też nie pochodzirsync
z innej odpowiedzi; ani nie jestyes
używany w jednym z komentarzy.Nadal możemy się rozmnażać
yes n
za pomocąwhile
pętli. Prowadzi to do następującego rozwiązania POSIX:źródło
Posługiwać się
cp -rn <sourcedirname>/. <destdirname>
Przełącznik r powoduje, że kopiowanie rekurencyjne w katalogach.
Przełącznik n (długa wersja bez blokady) zapewnia, że istniejące pliki nigdy nie zostaną nadpisane.
Znak „
/.
po nazwie źródła” gwarantuje, że nie stanie się on podkatalogiem pod nazwą destdir zamiast całej zawartości pierwszego z nich skopiowanego do drugiego.źródło