Masz trzy foldery:
- folder bieżący , który zawiera bieżące pliki
- folder stary , który zawiera starszą wersję tych samych plików
- różnica folderów , która jest tylko pustym folderem
Jak porównać stare z bieżącym i skopiować pliki, które są inne (lub całkowicie nowe) w bieżącym, aby je odróżnić ?
Szukałem dookoła i wydaje się, że jest to prosta sprawa, ale nie mogę sprawić, by działała w moim konkretnym przykładzie. Większość źródeł sugerowała użycie rsync, więc skończyłem z następującą komendą:
rsync -ac --compare-dest=../old/ new/ difference/
Powoduje to jednak kopiowanie wszystkich plików z nowego na różnicowy , nawet tych, które są takie same jak w starych .
W przypadku, gdy to pomaga (może polecenie jest w porządku, a wina leży gdzie indziej), oto jak to przetestowałem:
- Zrobiłem trzy foldery.
- Zrobiłem kilka starych plików tekstowych o różnych treściach .
- Skopiowałem pliki ze starego na nowy .
- Zmieniłem zawartość niektórych plików w nowym i dodałem kilka dodatkowych plików.
- Uruchomiłem powyższe polecenie i sprawdziłem różnice w wynikach .
W ciągu ostatnich kilku dni szukałem rozwiązania i naprawdę doceniłbym pomoc. Nie musi to koniecznie używać rsync, ale chciałbym wiedzieć, co robię źle, jeśli to możliwe.
Odpowiedzi:
Nie jestem pewien, czy możesz to zrobić za pomocą istniejących poleceń Linux, takich jak rsync lub diff. Ale w moim przypadku musiałem napisać własny skrypt za pomocą Pythona, ponieważ Python ma moduł „filecmp” do porównywania plików. Cały skrypt i użycie zamieściłem na mojej osobistej stronie - http://linuxfreelancer.com/
Jego użycie jest proste - podaj bezwzględną ścieżkę nowego katalogu, starego katalogu i katalogu różnic w tej kolejności.
źródło
Zorientowałem się, na czym polega problem w moim przypadku:
Porównywane przeze mnie pliki miały różne znaczniki czasu. Zakładam, że nie powinienem był używać argumentu -a , ponieważ rsync starał się zachować znaczniki czasu podczas kopiowania plików. Polecenie, które działało dla mnie było:
źródło
rsync -a
„kopiować” pliki początkowo (lub odpowiednik cp), a następnie usunąć lub zmodyfikować. (Lubię trzymać się rsync, ponieważ wiem, że jest samowystarczalny, nie myśląc o tym, co może robić). Myślę, że powinno to działać z oryginalnym poleceniem. Opcja -a obejmuje -t (porównaj według znacznika czasu), który jest alternatywą dla -c (porównaj według sumy kontrolnej).old/
inew/
.Może to pomóc niektórym czytelnikom: W systemie Windows starszy, mały darmowy program - Third Dir - robi dokładnie to, o co tu proszono. Nie jest już dostępny za pośrednictwem dewelopera Roberta Vašíčka. Ale jestem pewien, że można go znaleźć w niektórych repozytoriach online.
Oto opis programisty, który pozostaje na jego stronie:
Trzeci katalog: niezwykły synchronizator katalogów - różne pliki są kopiowane do trzeciego katalogu. Bardzo przydatne jest wyodrębnienie np. Nowych lub edytowanych zdjęć z dużego drzewa katalogów na dysku stałym do folderu tymczasowego, a następnie dodanie ich do archiwum CD (uwaga - oryginalne pliki są porównywane z CD). Wersja 1.4, rozmiar 23kB. Utworzono 2005-02-12.
Historia: Wersja 1.14 - Bardziej wydajna, gdy porównywane jest wiele dziesiątek tysięcy plików.
źródło
Sposób rsync podany przez Thane'a z dodatkami Yamaneko działa świetnie, ale pozostawia puste katalogi. Dla mnie ostateczne rozwiązanie było w dwóch krokach: najpierw wywołaj rsync z pełną ścieżką, a następnie polecenie find, aby usunąć wszystkie puste katalogi:
Pamiętaj, że nawet przy opcji --links rsync nie zachował dowiązań symbolicznych, ale skopiował dane docelowe.
źródło
-empty -exec rmdir {} \;
ciebie możesz użyć-empty -delete
.Używam dwupanelowego XY Explorera (komercyjnego), który potrafi robić wiele sztuczek i jest to jedna z nich. Otwórz
Current
w jednym okienku, a Stary w drugim. Aktywuj bieżący panel. Przejdź do Panes > Sync Select. Daje 5 opcji do wyboru:Teraz możesz skopiować wynikowy wybór z
Current
dowolnego miejsca. Użyłem go do porównaniamailfolders
starych instalacji z najnowszymi. Struktura folderów była dość złożona, ale (prawie) wszystkiembs-files
miały unikalny numer.Przeprowadziłem więc wyszukiwanie
mbs-files
w starym katalogu głównymmailfolder
(w jednym okienku), a także w najnowszym (w drugim okienku) i porównałem wyniki wyszukiwania w każdym okienku ( Sync Select Unique) , aby znaleźć wiadomości, które zaginęły podczas ponownie instaluje)! Możesz także ustawić wiele opcji.źródło