Już szukałem tej opcji, ale znalazłem tylko rozwiązania obejmujące niestandardowe łatanie . Fakt, że nie wyświetla się w --help i nie można znaleźć więcej informacji, prawdopodobnie oznacza, że odpowiedzi brzmi „nie”, ale chciałbym, aby to potwierdziło.
Czy można wyświetlić całkowity postęp przesyłania plików za pomocą rsync?
Odpowiedzi:
Danakim ma rację. Nie ma łatwych sposobów dodania wskaźnika całkowitego postępu.
Powodem tego jest to, że kiedy rsync przegląda listę plików do synchronizacji, nie wie z góry, które pliki należy zmienić. Jeśli wykonujesz transfery delta, same delty muszą zostać obliczone z wyprzedzeniem, aby dać całkowity obraz pracy, którą należy wykonać.
Innymi słowy, najłatwiejszym sposobem obliczenia ilości pracy, jaką należy wykonać, jest jej wykonanie.
źródło
--size-only
lub tym podobne jest dalsze niedokładne.Istnieje teraz oficjalny sposób, aby to zrobić w rsync (wersja protokołu 3.1.0 wersja 31, przetestowana z Ubuntu Trusty 14.04).
Próbowałem z moim
/usr
folderem, ponieważ chciałem tej funkcji do przesyłania całych systemów plików i wydawałem/usr
się być dobrą reprezentatywną próbką.--info=progress2
Daje ładny ogólny odsetek, nawet jeśli jest to tylko częściowe wartość. W rzeczywistości mój/usr
folder zawiera ponad 6 koncertów:i
rsync
dużo czasu zajęło jej zeskanowanie. Tak więc prawie cały czas, jaki widziałem, został ukończony w około 90%, ale mimo to pocieszające jest, że coś jest kopiowane :)Bibliografia:
źródło
--info=progress2
nie działa z-v
--no-i-r
przełącznik również, abyrsync
nie skanować przyrostowo, ale całkowicie przed kopiowaniem i wie, + wyświetla pozostałą pracę.--human-readable
(lub-h
), aby zobaczyć całkowity rozmiar w MB / GB .. w toku.Możesz to zrobić przy pomocy „pv” (
apt-get install pv
z Debianem i Ubuntu). Zalecam monitorowanie liczby przesyłanych plików, ponieważ ilość przesyłanych danych nie jest skorelowana z rozmiarem plików, ale na delcie między źródłem a miejscem docelowym. A zliczanie plików policzy ten sam postęp dla jednej dużej delty i drugiej z małą deltą. Co oznacza, że w każdym razie oszacowanie ETA może być dalekie. ETA oparte na rozmiarach działa tylko wtedy, gdy miejsce docelowe jest puste, w tym przypadku delta == rozmiar źródła.Ogólny pomysł polega na emisji jednej linii na plik „przesłany” z rsync i policzeniu tych linii za pomocą „pv”:
Mam tendencję do tworzenia kopii zapasowych całych systemów plików (z kilku powodów), w tym przypadku możesz użyć o wiele tańszego,
df
aby uzyskać liczbę plików (zamiastdu
lubfind
który przejdzie do twojej hierarchii źródłowej innym razem po tym, jak rsync to zrobi). Pojawia się opcja -x, aby upewnić się, że rsync pozostaje w tym samym źródłowym systemie plików (i nie wykonuje innych wewnętrznych montowań):Jeśli chcesz policzyć pliki w / source w ogólny sposób, użyj
find /source|wc -l
(ponownie ostrzeżenie: może być powolny i ciężki we / wy).źródło
df -i /source
pobiera liczbę i-węzłów (plików) ze wszystkich partycji, na których znajduje się / source. W przeciwnym razie użyj „find”, aby policzyć pliki w katalogu wewnątrz wyrażenia „$ ()”.du
lubfind
- powiedzmy, że kończysz niekompletną kopię lub wykonujesz aktualizację w miejscu z usuwaniem - jest skorzystaniersync -ai --dry-run
z tej samej listy plików, do której zostanie przekazany główny przebiegpv
Poniższe informacje dotyczą rsync w wersji 3.0.0 i nowszej. Opcje opisane poniżej zostały wprowadzone w tym wydaniu 1 marca 2008 r.
Wraz z --info = progress2 możesz również użyć opcji --no-inc-recursive (lub jej krótszego aliasu - no -ir ), aby wyłączyć przyrostową rekurencję.
Spowoduje to utworzenie całej listy plików na początku, zamiast stopniowego wykrywania kolejnych plików w miarę przesyłania. Ponieważ zna wszystkie pliki przed uruchomieniem, daje lepszy raport na temat ogólnego postępu. Dotyczy to liczby plików - nie zgłasza żadnego postępu w oparciu o rozmiary plików.
Obejmuje to kompromis. Zbudowanie całej listy plików przed czasem jest bardziej kosztowne pod względem pamięci i może znacznie opóźnić rozpoczęcie faktycznego transferu. Jak można się spodziewać, im więcej plików, tym dłuższe będzie opóźnienie i więcej pamięci zajmie.
Poniżej znajduje się podręcznik rsync (źródło - http://rsync.samba.org/ftp/rsync/rsync.html ):
Zobacz także https://rsync.samba.org, aby zapoznać się z konkretnymi różnicami między wersjami (przewiń w dół i sprawdź linki Wiadomości prasowych).
źródło
W przypadku długich transferów jestem zadowolony z biegania
du -s
po obu stronach. Nawetwatch -n1 du -s
jeśli czuję się naprawdę niespokojny.watch
wykonuje polecenie (du -s
tutaj) okresowo (co 1 sekundę tutaj) i wyświetla pełny ekran wyjściowy.źródło
watch
polecenia!Zasadniczo nie. Postęp można wyświetlać tylko dla pliku z flagą --progress, ale o to chodzi.
Zgaduję, że możesz napisać wokół niego opakowanie lub użyć jednej z łat, które już znalazłeś, ale musisz zadać sobie pytanie, czy naprawdę jest tego warte, czy naprawdę potrzebujesz całkowitego postępu dla rsync?
źródło
--progress
pracy--info=progress2
, pokaże ci globalny postęp. Będziesz musiał wyłączyć przyrostowy algorytm rekurencyjny, aby był on użyteczny, więc--info=progress2 --no-inc-recursive
Użyłem odpowiedzi z zerodeux i napisałem własny skrypt bash:
źródło
Szukałem również sposobu pokazania całkowitego postępu z rsync i znalazłem użyteczną odpowiedź z tego postu: https://stackoverflow.com/questions/7157973/monitoring-rsync-progress
Zasadniczo możesz użyć --info = progress2 w wersji deweloperskiej rsync 3.1.0 . Oto, co powiedział doktor :
źródło
--info=name0
jest złoty 🌈👑Użyłem odpowiedzi z zerodeux i napisałem własny mały skrypt BASH:
Zmieniłem bieg próbny TODO na
Bardzo szybko wyszukuje liczbę plików!
źródło
find
działa tylko, jeśli jesteśrsync
lokalnie.rsync --dry-run
współpracuje również ze zdalnymi źródłami ...Jeśli nie masz najnowszej wersji rsync (np. OS X ma wersję 2.6.9) i nie możesz jej użyć
--info=progress2
, oto kolejna alternatywa, aby zapisać się na stronach przewijanego tekstu o postępie:rsync -aPh <source> <destination> | xargs -L1 printf "\33[2K\rTransferring: %s"
Spowoduje to wydrukowanie, w jednym wierszu, nazwy najnowszego przesyłanego pliku:
Transferring: the-latest.file
źródło
Posługiwać się
Aby zobaczyć, jakie pliki rsync obecnie otworzy (pokaże rozmiar pliku), lokalnie kopiuje rsync do ukrytego pliku
źródło
for i in $(pgrep 'rsync'); do ls -l /proc/$i/fd; done
ale twoje rozwiązanie jest prostsze.Zrobiłbym to komentarz, ale nie mam wystarczającej reputacji. W odpowiedzi na komentarz naught101 do wybranej odpowiedzi opcja --progress pokazuje, ile plików zostało przeniesionych z całkowitej kwoty do przesłania. Nie zdawałem sobie z tego sprawy, dopóki nie spojrzałem na ten post i nie przyjrzałem się dokładniej wynikowi.
Statystyka „do sprawdzenia” pokazuje, ile plików pozostało w sumie. Jest to najbardziej przydatne podczas synchronizacji z nowym miejscem docelowym, aby wiedzieć, że wszystkie pliki zostaną w pełni skopiowane.
Ze strony podręcznika:
źródło
Zwróć uwagę na to, że nawet --info = progress2 nie jest do końca wiarygodne, ponieważ procent ten jest oparty na liczbie plików, o których rsync „wie” w czasie, gdy wyświetlany jest postęp. Niekoniecznie jest to łączna liczba plików, które musiały zostać zsynchronizowane (na przykład, jeśli wykryje dużą liczbę dużych plików w głęboko zagnieżdżonym katalogu). Jednym ze sposobów upewnienia się, że --info = progress2 nie „przeskakuje do tyłu” we wskazaniu postępu, byłoby wymuszenie na rsync skanowania wszystkich katalogów rekurencyjnie przed rozpoczęciem synchronizacji (zamiast domyślnego zachowania polegającego na wykonywaniu skanowania przyrostowo rekurencyjnego), udostępniając także opcję --no-inc-recursive. Należy jednak pamiętać, że ta opcja zwiększy również zużycie pamięci rsync i czas działania.
źródło
--no-inc-recursive
opcji lub jej krótszego--no-i-r
aliasu. (Zobacz inną odpowiedź)Używam skryptu, który wyodrębnia informacje z / proc // io dla procesu rsync (lub dowolnego innego procesu w tym zakresie) i wiedząc, że całkowita kwota do przesłania oblicza postęp.
źródło
Jeśli twoja wersja
rsync
nie akceptuje tej--info=progress2
opcji, możesz użyćtqdm
:Żeby zainstalować:
Używać:
źródło
Być może możesz połączyć
pv
z rsync. Szczególnie ten parametr--size
może być pomocny. Patrząc na dokumenty, coś takiegopv --size $(du -sb . | awk '{print $1}') | rsync -av . host:/your/path
powinno działać.Tutaj znajdziesz dokumenty i oprogramowanie.
Nie próbowałem tego sam.
źródło
Może tu być trochę za późno, ale przyszli poszukiwacze odpowiedzi mogą skorzystać.
To mnie też wkurzyło, więc pomyślałem, że zejdę na dół i napisam swój pierwszy scenariusz. Pakiet zenity musi być zainstalowany (sudo apt-get install zenity), ale jestem pewien, że prawdopodobnie już tam będzie. Ponadto używam wmctrl (kontrolka menedżera okien), aby zmienić tytuł okna dialogowego postępu, gdy jest zrobiony, jest łatwy do zainstalowania, ale nie zrobi różnicy, jeśli tego nie zrobisz. Po prostu lubię widzieć, kiedy skończy się w moim panelu.
Skrypt zasadniczo pyta o katalog źródłowy i docelowy, oblicza procent miejsca docelowego w stosunku do źródła za pomocą du i wyświetla pasek postępu.
Uwaga: Działa to tylko w przypadku pełnej synchronizacji katalogu / pliku (zwykle używam go do tworzenia kopii zapasowych apt cache), więc nie ma opcji --exclude = / file / in / Source-directory. Nie zadziała również, jeśli w katalogu docelowym nie ma plików / katalogów, a nie katalogu źródłowego. Nie jestem pewien, czy to działa dla zdalnych źródeł / miejsc docelowych, ponieważ nigdy nie miałem potrzeby ani zasobów, aby to przetestować.
PS. Ten skrypt może być bardzo źle napisany lub bardzo nieefektywny (tutaj skrypt-dziewica), ale przynajmniej spełnia swój cel i oczywiście możesz go edytować i ulepszać, aby odpowiadał twoim potrzebom. PSS. Ponadto nie mogłem dostać przycisku Anuluj, aby zabić rsync, więc właśnie go usunąłem.
źródło