Jak mogę skopiować (duży) katalog na inny, zmieniając tylko pliki, które się różnią?


14

Mam katalog a i katalog b. Są duże. b jest prawie identyczne z a. „prawie” oznacza, że ​​4-5 plików różnią się i nie wiem, które to pliki. Chcę skopiować b na a, ale tylko pliki, które się różnią. jestem w bash.

(nie, nie mogę po prostu usunąć a i zastąpić go na b, ponieważ 1) a jest sterowany wersją 2) pełna kopia (lub mv) zajęłaby zbyt wiele. Chcę skopiować tylko te pliki, które się różnią).


Jest rsyncopcja?
Bobby

Tak, ale niewiele wiem o rsync.
konferencja janes

Odpowiedzi:


17

Możesz rsyncto zrobić za pomocą polecenia, którego używamrsync -tr "folder to copy from" "folder to copy to"

na przykład rsync -tr /home/me/stuff/* /home/me/otherstuff/


1
UWAGA na to polecenie. Usunie wszystkie pliki, które nie będą się różnić. Uruchomiłem i straciłem prawie wszystko !!
Arvind K.

@Arvind Nie wiem, jakiego polecenia użyłeś, co spowodowało utratę danych, ale nie był to rsync -tr. Przeczytaj stronę podręcznika.
Tog

18

Można to również zrobić za pomocą starego, dobrego cp:

Dzięki srcspider za przypomnienie mi o użyciu -T!

cp -ruT old-dir new-dir


+1 Tak przyzwyczajam się do synchronizacji na różnych maszynach, że zapominam o eleganckich sposobach.
Tog

nie działa dla mnie :(
janesconference

To właściwie dobre CPR. ;-)
Keith

1
W systemie OS X opcja -u nie istnieje. Po prostu użyłem cp -r stary-katalog nowy-katalog, ponieważ nie musiałem porównywać dat.
Jean-François Beauchamp

Nie działa. Nie jestem pewien, czy jest to jakaś konwencja nazw, ale cp -ru folder-A folder-B po prostu skopiuje folder-A wewnątrz folderu-B nie skopiuje zawartości A wewnątrz B i nadpisze, co byłby pożądanym efektem.
srcspider

1

Inną dobrą opcją jest Unison ( http://www.cis.upenn.edu/~bcpierce/unison/ ), szczególnie jeśli tak naprawdę nie ma „źródła” i „miejsca docelowego”. Każdy katalog jest katalogiem głównym, a Unison synchronizuje je i przechowuje metadane do przyszłych synchronizacji. Oferuje zarówno wiersz poleceń, jak i opcję GUI, którą można łatwo zaplanować również za pomocą crona.

Używam go do tworzenia kopii zapasowej mojego Dropbox na moim lokalnym urządzeniu NAS, które nie może uruchomić klienta Dropbox.


1

Można tego dokonać z dobrym, ale nieco innym formatem niż podano powyżej. Oto jak to zrobiłem:

cp -ru --target-directory="destination_path" source_path/*

1

Możesz różnicować 2 katalogi.

diff -r dir1 dir2

pokaże ci listę plików, które są różne

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.