Chciałbym skopiować zestaw plików z katalogu A do katalogu B, z zastrzeżeniem, że jeśli plik w katalogu A jest identyczny z plikiem w katalogu B, plik ten nie powinien być kopiowany (a zatem jego czas modyfikacji nie powinien być zaktualizowane). Czy można to zrobić za pomocą istniejących narzędzi, bez pisania własnego skryptu?
Aby nieco rozwinąć mój przypadek użycia: automatycznie generuję kilka .c
plików w katalogu tymczasowym (metodą, która musi bezwarunkowo wygenerować je wszystkie), a kiedy je ponownie generuję, chciałbym tylko skopiować te, które zmieniły się w rzeczywisty katalog źródłowy, pozostawiając te niezmienione bez zmian (ze starymi czasami tworzenia), aby make
wiedzieć, że nie trzeba ich ponownie kompilować. ( .c
Jednak nie wszystkie generowane pliki są plikami, więc muszę porównywać binarnie, a nie porównywać tekst).
(Uwaga: wynikało to z pytania, które zadałem na https://stackoverflow.com/questions/8981552/speeding-up-file-comparions-with-cmp-on-cygwin/8981762#8981762 , gdzie próbowałem aby przyspieszyć plik skryptu, którego używałem do wykonania tej operacji, ale przychodzi mi do głowy, że naprawdę powinienem zapytać, czy istnieje lepszy sposób na zrobienie tego niż pisanie własnego skryptu - zwłaszcza, że jakikolwiek prosty sposób to zrobić w powłoce skrypt wywoła coś podobnego cmp
do każdej pary plików, a uruchomienie wszystkich tych procesów trwa zbyt długo).
rsync -avnc
lub daleko rsync --archive --verbose --dry-run --checksum
.
diff -qr dirA dirB
aby zobaczyć, które pliki są unikatowedirA
idirB
, odpowiednio.