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ą).

konferencja janes
źródło
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/

Elegantować się
źródło
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

nowy123456
źródło
+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.

Digitalcraig
źródło
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/*
Sven Croon
źródło
1

Możesz różnicować 2 katalogi.

diff -r dir1 dir2

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

Oleg
źródło