Mam dwa katalogi z tysiącami plików, które zawierają mniej więcej te same pliki.
Jak mogę skopiować wszystkie pliki z katalogu dirA do katalogu dirB, które nie znajdują się w katalogu dirB lub jeśli plik istnieje w katalogu dirB, nadpisuje go tylko wtedy, gdy jest mniejszy.
Wiem, że istnieje wiele przykładów różnych znaczników czasu lub różnych rozmiarów plików, ale chcę je zastąpić tylko wtedy, gdy plik docelowy jest mniejszy i w żadnym wypadku nie jest większy.
Tło mojego problemu:
Wyrenderowałem dynmapę na moim serwerze Minecraft, ale niektórych kafelków brakuje lub są one uszkodzone. Następnie wykonałem renderowanie ponownie na innym komputerze z szybszym procesorem i skopiowałem wszystkie nowe renderowane pliki (~ 50 GB / 6.000.000 ~ 4-10 KB PNG) na mój serwer. Potem zauważyłem, że w moim nowym renderowaniu są również uszkodzone pliki.
left: stary render, prawo: nowy render
Dlatego nie chcę nadpisywać wszystkich plików, ale tylko te, które są większe (uszkodzone przenoszą mniej danych i są mniejsze).
stat
na plikach w obu lokalizacjach, aby uzyskać rozmiar pliku, a następnie skopiuj, jeśli spełnia twoje warunki
rsync
opcji, których potrzebujesz, ale nie znalazłem właściwej, więc poszedłem w prosty sposób
cp
z kombinacjącmp
poleceń lub lepiej korzystaj zrsync
wszystkich dostępnych opcji