Jak cp pozostałych plików po nieudanej próbie

23

Próbuję skopiować duży katalog z jednego dysku na drugi. Przez pomyłkę wylogowałem się przed jego zakończeniem, więc tylko około 80% plików zostało skopiowanych. Czy istnieje możliwość skopiowania pozostałych plików bez rozpoczynania od zera?

barro32
źródło

Odpowiedzi:

35

Spróbowałbym,

rsync -a /from/file /dest/file

można korzystać z innych opcji, takich jak --append, -P (--partial --progress). Aby uzyskać więcej informacji, zobacz man rsync .

Lub jeśli używasz, cpużyj cp -u.

z man cp:

-u, --update
     copy only when the SOURCE file is newer than the destination file or when the destination file is missing.
Rahul
źródło
1
Będę musiał dać to Rahulowi, bo on cię po prostu pobił, ale dziękuję i wszyscy dostają głos!
barro32,
3
Jeśli pierwsza kopia zakończyła się nagle, jeden z plików może zostać skopiowany tylko częściowo i cp -umoże się nie przejmować, ponieważ sprawdza tylko znaczniki czasu, a nie rozmiar ... Więc musisz touchnajpierw znaleźć pliki źródłowe, jeśli musisz go użyć . (Lub po prostu użyj rsync.)
ilkkachu
@ilkkachu to prawda. Niedługo to zaktualizuję.
Rahul
Czy cp kiedykolwiek pozostawia pojedynczy plik tylko częściowo przesłany? Jeśli tak, to -u wydaje się, że pozostawiłby ci katalog, który działał tylko częściowo.
Trevor
15

W przypadku częściowego przesyłania plików cpmoże nie być to, czego potrzebujesz.

Sugeruję użycie rsynczamiast tego. Nawet jeśli przesyłanie się nie powiedzie, możesz po prostu ponownie uruchomić polecenie w późniejszym czasie i skopiuje tylko brakujące pliki.

Przykład:

$ rsync -aPEmivvz from/ to/

(skopiuje from/do to/katalogu)

Ponieważ rsyncsynchronizowanie i sprawdzanie po każdym transferze zapewnia prawidłowe kopiowanie plików, jest banalne.

Ten zestaw -aPEmivvzjest moim standardowym wyborem do kopiowania plików za pośrednictwem sieci lub dysków zewnętrznych, w tym urządzeń wtykowych, takich jak karty SD itp.

Są to przełączniki, których używam prawie zawsze:

-a: „archiwum”, obejmuje -rlptgo(rekurencyjne, dowiązania symboliczne jako dowiązania symboliczne, uprawnienia, czasy, grupa, właściciel)

-P: „częściowy postęp” pokazuje ładny pasek postępu dla każdego pliku

-E: „wykonywalność” zachowuje, czy jest wykonywalna czy nie

-m: „noempty” przycina puste katalogi

-i: podsumowanie zmiany wydruku „podsumowanie” dla wszystkich aktualizacji

-vv: „bardziej szczegółowy”

-z: „kompresja”

polemon
źródło
6

To, czego prawdopodobnie chcesz, a nie cpw tym przypadku, to rsync.

Wystarczy rekurencyjnie skopiować jedną strukturę katalogów do nowej lokalizacji:

rsync -av /path/to/source /path/to/destination 
Shadur
źródło
4

Nie należy cpdo tego używać . Jak powiedzieli inni, nie jest to właściwe narzędzie do pracy. Właściwe narzędzie będzie zależeć od twoich celów.

Jeśli potrzebujesz tylko prostej kopii:

rsync /source /destinationz pewnym poziomem flag. Zobacz inne odpowiedzi na kilka naprawdę dobrych przykładów.

Jeśli chcesz mieć aktualizacje dwukierunkowe

unisonjest droga. Rsync nie radzi sobie zbyt dobrze w rozwiązywaniu konfliktów z synchronizacjami dwukierunkowymi. Specjalnie usuwa. Więc chcesz, aby odpalały się dwukierunkowe kopieunison

Jeśli chcesz tworzyć kopie zapasowe, a pliki są oparte na tekście, możesz spróbować użyć git. Git można uruchamiać lokalnie, nie ma potrzeby używania „serwera”. W rzeczywistości serwery git są tylko metodami udostępniania plików. Możesz całkowicie mieć repozytorium git na dysku kopii zapasowej i „wypychać” go. Ponownie działa to tylko wtedy, gdy pliki są oparte na tekście i próbujesz uzyskać kopię zapasową w jedną stronę.

Ponownie, jeśli masz zamiar wykonać kopię zapasową (i nie tylko raz), spójrz na deja-dupe, BackIntime lub podobne opcje. Wykonują migawki danych w danym momencie. Wszystkie uruchamiają rsync pod maską.

Coteyr
źródło
4

Możesz także ponownie skopiować wszystkie pliki, poprosić o potwierdzenie każdego zastąpienia, a następnie automatycznie odpowiedzieć „nie” na pytanie:

yes n | cp -i /source /dest

(prawdopodobnie użyłeś więcej opcji, na przykład -r, więc po prostu dodaj je jak cp -pri /source /dest...)

Ned64
źródło
3

Użyj polecenia rsyncz następującymi opcjami:

rsync --progress --partial --append /source_file /destination_file
GAD3R
źródło