Od pewnego czasu używam rsync do kopiowania plików. Rozumiem, że rsync jest szybszy niż cp, gdy niektóre pliki do przesłania znajdują się już w katalogu docelowym, przenosząc tylko różnicę przyrostową (tj. „Delta”).
Jeśli jest to poprawne, czy przydałoby się użycie rsync do przeniesienia zawartości folderu A , na przykład folderu B , przy czym B jest pusty?
Folder A zawiera prawie 1 TB danych (i miliony plików). Transfer byłby wykonywany przez sieć lokalną ( A i B znajdują się w różnych systemach plików, oba zamontowane na superkomputerze, np. A to NFS, a B to połysk ).
Poza tym, jakich flag powinienem użyć, aby poprosić rsync o przeniesienie (nie kopiowanie) plików z A do B (tj. O usunięcie A po pomyślnym zakończeniu przesyłania)?
rsync
może zastąpićmv
. Spodziewałbymmv
się, że będę działać szybciej na większości typów systemów plików, gdy źródło i miejsce docelowe znajdują się w tym samym systemie plików, ponieważrsync
musiałbym wykonać kopię bez względu na wszystko imv
prawdopodobnie mógłbym uniknąć zmiany kilku pozycji katalogu. Najbliższa rzecz, jaką mogę znaleźć,rsync mv
to--remove-source-files
polecenie, ale to nie usuwa katalogów.mv
przyspieszyłoby?mv
nie może działać w sieci - musiałby polegać na lokalnym podłączeniu (np. NFS). Jeśli wąskim gardłem jest sieć,rsync
prawdopodobnie byłby szybszy niżmv
ponieważrsync
może to zrobić kompresję.cp
ma-u
opcję kopiowania pliku źródłowego, jeśli jest nowszy niż plik docelowy lub gdy brakuje pliku docelowegoOdpowiedzi:
Możesz przejść
--remove-source-files
do rsync, aby przenieść pliki zamiast je kopiować.Ale w twoim przypadku nie ma sensu używać rsync, ponieważ miejsce docelowe jest puste. Równina
mv
wykona zadanie tak szybko, jak to możliwe.W twoim przypadku, co może mieć wpływ na wydajność, to wybór protokołu sieciowego, jeśli masz wybór pomiędzy NFS, Samba, sshfs, sftp, rsync nad ssh, tar piped do ssh itp. Względna szybkość tych metod zależy na temat rozmiarów plików, przepustowości sieci i dysku oraz innych czynników, więc nie ma sposobu na udzielenie ogólnych porad, musisz uruchomić własne testy porównawcze.
źródło
--remove-source-files
tylko usuwa pliki w źródle. jeśli chcesz wyczyścić nasze źródło, czy nie musiałbyś wykonać rm -rf (lubfind
wszystkich katalogów i przekazać-delete
) na źródle po pomyślnym uruchomieniu rsync?--checksum
, aby sprawdzić poprawność wyników pierwszej synchronizacji.Ponieważ
--remove-source-files
nie usuwa katalogów, wydaje następujące polecenia, aby przenieść pliki przez ssh:Osobiście podoba mi się ta
--progress
funkcja, ponieważ przesyłam to ręcznie. Usuń go, jeśli używasz skryptu. Oczekuję, że nieznacznie spowolni to transfery. Przezfind
kasowania opcji poleceń za usuwa tylko puste katalogi - nie używaćrm -rf
, ponieważ może usuwać niepuste katalogi, w przypadku, gdy plik nie został przekazany.-delete
Opcja włącza-depth
opcję tak, że puste drzewa katalogów są usuwane z „dołu” w górę.źródło
-delete
jest znacznie ładniejszy niż-exec rmdir {} +
itp.Ogólnie rzecz biorąc, jak powiedział Gilles, nie ma żadnej przewagi przy
rsync
przenoszeniu plików, kiedymv
łatwiej wykonać to samo zadanie i nie ma potencjalnego przyrostu prędkości między zwykłymi systemami plików.Są jednak chwile, w których występuje przewaga. W szczególności, jeśli masz jakiekolwiek wątpliwości co do stabilności źródła, miejsca docelowego lub maszyny wykonującej pracę, użycie
rsync
daje możliwość wznowienia. Może to być znaczącą zaletą, jeśli przeniesienie jest bardzo duże i, powiedzmy, twoja sieć energetyczna jest zawodna. Użycie rsync będzie bardziej stabilnym sposobem na uniknięcie uszkodzenia danych w przypadku awarii i wybranie tam, gdzie zostało przerwane.źródło
mv
jest lepszy tylko wtedy, gdy cel i źródło znajdują się na tej samej partycji, więcmv
edytuje tylko metadane pliku zamiast kopiować.rsync
a nie mv, kiedy chcę zachować strukturę folderów (jeśli używasz--relative
).Znalazłem się w sytuacji, gdy rsync IS jest szybszy niż mv po prostu dlatego, że mv nie może obsłużyć liczby plików w katalogu. Mam 1,8 miliona zdjęć z aparatu bezpieczeństwa, który działał przez 20 dni, a polecenie mv kończy się niepowodzeniem, ponieważ nie może przydzielić zasobów.
Wydaje się jednak, że rsync bez problemu obsługuje wszystkie pliki.
źródło
Jeśli chcesz rekurencyjnie scalać katalogi ... przenieś jeden katalog do innego z potencjalnie zduplikowanymi nazwami katalogów, to proszę zobacz moją odpowiedź tutaj na serverfault.com.
mv
robi kiepską robotę, gdy istnieją katalogi o tej samej nazwie, irsync
kopiuje (odczytuje + zapisuje pełne dane) każdy plik zamiast po prostu je przenosić (metadane tylko do odczytu i zapisu).źródło
Nie ma sposobu na przeniesienie plików za pomocą rsync, tak jak zrobiłaby to komenda Linux mv. Używając --remove-source-files, zasadniczo kopiujesz pliki do miejsca docelowego, a następnie usuwasz pliki (z wyjątkiem katalogów) ze źródła. Może to pomóc w przeniesieniu plików, ale NIE zaoszczędzisz czasu ani operacji we / wy.
źródło