Kopiuj tylko nowe pliki - czy to możliwe? Zasadniczo chcesz scalić dwa foldery

10

Mam folder na Dysku 1 o nazwie Muzyka i ma on pojemność 100 GB. Mam folder na Dysku 2 o nazwie Muzyka i ma on pojemność 116 GB. To najnowsza wersja. Jak skopiować folder Muzyka z Dysku 2 na Dysku 1 bez konieczności przepisywania każdego pojedynczego pliku?

dallen
źródło
Z jakiej wersji OS X korzystasz?
Nix
1
Używam 10.7.4. Kiedy kopiuję folder z jednego dysku na drugi, pojawia się pytanie, czy chcę go wymienić. Brak opcji scalania.
dallen

Odpowiedzi:

5

Opcja scalania pojawi się tylko wtedy, gdy kopiujesz (a nie przenosisz) folder. Pamiętaj, aby przytrzymać optionpodczas przeciągania nowego folderu do lokalizacji starego folderu. Alternatywnie, użycie +, caby skopiować nowy folder i +, vaby wkleić stary folder, powinno dać ci możliwość scalenia plików.

Nic
źródło
Nadal wydaje się, że zapisuje pliki, które nie muszą być przepisywane. Korzystanie rsynczamiast
BRogers
Nawet jeśli opcja scalania jest dostępna, czasami nie działa (po prostu zgłasza błąd i nic nie robi) - szczególnie w przypadku dużych folderów, jak w twoim przypadku. To kolejny powód, dla którego powinieneś używać rsync.
Andrzej Martyna
21

Jest to klasyczny przypadek użycia rsync:

rsync -av /source-path/source-dir /destination-path

rsync skopiuje tylko nowe i zmienione pliki do nowej lokalizacji.

Ważne jest, aby zrozumieć, jak działa ukośnik końcowy argumentu źródłowego. Jeśli występuje ukośnik końcowy, zawartość katalogu / source-path / source-dir zostanie skopiowana do ścieżki docelowej . Jeśli nie ma końcowego ukośnika, sam katalog źródłowy zostanie skopiowany do miejsca docelowego, a jego zawartość znajdzie się na wyższym poziomie w hierarchii docelowej.

Więc jeśli chcesz zreplikować jedną ścieżkę do drugiej, dołącz końcowy ukośnik w następujący sposób:

rsync -av /sourcepath/sourcedir/ /duplicatpath/sourcedir/
John D.
źródło
1
Ładny chwyt! A jeśli robisz to z wielu dysków (lub z dowolnego miejsca na komputerze) i nie chcesz wpisywać katalogów, możesz po prostu przeciągnąć dysk (zewnętrzny USB lub kapsułę czasu) lub po prostu określony katalog i dodać to do polecenia dla ciebie. Po prostu przeciągnij lokalizację docelową do terminala
BRogers
Człowieku, bardzo dziękuję za zasugerowanie końcowego cięcia. Zastanawiałem się, dlaczego rsync -av ./foo/bar / vol1 / foo / bar kopiuje wszystkie istniejące pliki. Krwawe cięcia lol !!!
sming
1

Sprawdź cppolecenie. Użyj man cpi przeczytaj opcje. Możesz zrobić coś takiego:

cp -r -u ~/source ~/destination

-R, -r , --recursive: rekursywnie kopiuj katalogi
-u , --update: kopiuj tylko wtedy, gdy plik SOURCE jest nowszy niż plik docelowy lub gdy brakuje pliku docelowego
-p taki sam jak --preserve = mode, własność , znaczniki czasu
-v --verbose: wyjaśnij, co się dzieje

Więc jeśli chcesz skopiować pliki z folderu Pobrania / muzyki, aby powiedzieć swój folder Muzyka / nowy , zrobiłbyś coś w następujący sposób: Scaliłoby zawartość tych dwóch folderów, a jeśli istnieją dwa pliki o tej samej nazwie i ścieżce, zachowałoby najnowszy oparty na sygnaturze czasowej.
cp -ruvp ~/Downloads/music/* ~/Music/new/

drew7721
źródło
Czy na pewno opcja -u działa z poleceniem cp w OSX? Dostaję komunikat „cp: nielegalna opcja - u” w Sierra. Wygląda na to, że nie wszystkie polecenia są takie same jak w Linuksie.
OMA
Wypróbuj polecenie cp --help i sprawdź, czy opcja jest dostępna. Lub sprawdź wersję cp i upewnij się, że jest aktualna. Używam: cp (GNU coreutils) 8.27
drew7721
Niestety, -u nie jest poprawną flagą dla cp na OS X. Bardzo dobrze byłoby mieć!
Per Quested Aronsson
0

Nie jestem pewien, dlaczego domyślny przycisk Scalanie lwa nie jest dla mnie wyświetlany. Ale skończyło się na tym ditto. Znaleziono tutaj: https://superuser.com/a/221599/102789

dallen
źródło
1
BĄDŹ OSTROŻNY! ditto nie zachowuje nowszych plików, zawsze nadpisuje miejsce docelowe źródłem. Jeśli plik źródłowy jest starszy, usunie nowy plik i zastąpi starszym plikiem
FrancescoMM
to prawda - bardzo ważne ostrzeżenie od FrancescoMM, użyj rsync
Andrzej Martyna