Czy można zobaczyć szybkość CP i procent skopiowane?
251
Mam problemy z kopiowaniem dużych plików za pomocą nautilusa (blokuje się). Muszę skopiować, używając cp. Chciałbym wiedzieć, czy są jakieś parametry, które pokazują% skopiowane, a także prędkość transferu.
Midnight Commanderdziała również dobrze i ma ładny tekstowy interfejs użytkownika z paskami postępu, ale może nie zostać zainstalowany. Spróbuj mcw wierszu polecenia. Oczywiście nie jest cp.
CVn
3
Używanie rsyncz --progresswłaśnie sprawiło, że zrozumiałem, co się dzieje. Utknie, gdy osiągnie 100%, a następnie potrwa kilka minut. Myślę, że to samo dzieje się z nautilus. W każdym razie jest to już inne pytanie, więc najlepszą odpowiedzią na to pytanie jest: rsync --progresspokazuje rozmiar,%, szybkość i czas, który upłynął.
yzT
2
Jednym z problemów z rsync jest to, że działa wolniej niż czysta kopia. Na moim dużym serwerze różnica wynosi odpowiednio 60 MB / si 300 MB / s.
pdwalker
1
@pdwalker nawet z -Wopcją? na wszystkich moich hostach rsyncjest prawie tak szybki jak cp... tak blisko, że regularnie używam rsynczamiast cp.
Skaperen
Odpowiedzi:
193
rsyncma flagę o nazwie, progress2która pokazuje ogólny procent:
--info = progress2 wciąż nie przeszedł do domyślnego repozytorium, a oto 2015. Wydaje się, że to dobry pomysł.
Lonniebiz
1
--info=progress2w końcu włączone version 3.1.0 protocol version 31. Może mógłbyś edytować swoją odpowiedź, yzT.
Sopalajo de Arrierez
1
Zauważyłem, --info=progress2że rsync płonie szybko! 200 MB / s, podczas gdy Windows nie przekracza 90 MB / s!
ReneFroger
1
@ReneFroger, chociaż może to być rzeczywista prędkość (w zależności od urządzenia), często w Linuksie ta szybkość jest naprawdę nieprawdziwa, a po zakończeniu kopiowania system nadal zapisuje na urządzeniu, w przeciwieństwie do systemu Windows, w którym można wysunąć urządzenie prawie natychmiast. Jeśli kopiujesz duże pliki, możesz zauważyć, jak zaczyna się ono z tak dużą prędkością, ale potem spada do standardowego.
yzT
7
działało dla mnie tylko z --progress. wersja rsync 3.0.9
adrianTNT
103
Jeśli dopuścisz inne narzędzia, cpto z pewnością jest to możliwe. Do jednego pliku możesz użyć pv. To małe narzędzie zapewniające ładne statystyki.
pv inputfile > outputfile
Jeśli masz wiele plików lub katalogów, możesz użyć tar:
tar c sourceDirectory | pv | tar x -C destinationDirectory
Możesz owinąć go funkcją powłoki. Mniej pisać, a semantyka zbliżona do semantyki cp. Oto bardzo prosta (i nie odporna na błędy!) Funkcja:
cpstat () {
tar c "$1" | pv | tar x -C "$2"
}
Zauważ, że niektóre wersje tarnie obsługują wyżej wspomnianej składni (np. Solaris tar) i musisz użyć następującego wariantu:
To da ci szybkość transferu, ale nie ETA, ponieważ pvnie wie, ile danych będzie przechodzić przez potok. Możesz to określić za pomocą -s. Np najpierw zrobić du -sh sourceDirectory, aby uzyskać (szorstki) pomysł, a następnie przekazać je pvw następujący sposób: pv -s 100m.
Jan Fabry
1
--info = progress2 daje statystyki postępu na poziomie katalogu.
AlexLordThorsen
vbuf(debian, ubuntu) jest znacznie szybszy niż pv, prawdopodobnie ze względu na wirtualny bufor pierścieniowy
Skaperen
@Skaperen Nie wiem vbuf. Ale wydaje się, że obecnie jest on niestabilny w Debianie i dlatego często nie jest dostępny na serwerach, na których zwykle działa stabilna wersja Debiana.
Marco
58
rsync działa najlepiej do pokazywania postępu podczas postępu kopiowania.
Jak wyjaśniono w innych odpowiedziach, CP nie zapewnia tej funkcjonalności. Jednak postęp (wcześniej nazywany cv) to małe narzędzie, które jest bardzo pomocne w zapewnieniu tej brakującej funkcji.
To narzędzie można opisać jako polecenie * Tiny Dirty Linux Only * C, które wyszukuje podstawowe polecenia coreutils (cp, mv, dd, tar, gzip / gunzip, cat, ...) aktualnie wyświetlane w systemie i wyświetla odsetek skopiowanych dane.
cd /tmp
wget http://ftp.gnu.org/gnu/coreutils/coreutils-8.21.tar.xz
tar -xvJf coreutils-8.21.tar.xz
cd coreutils-8.21
wget https://raw.githubusercontent.com/atdt/advcpmv/master/advcpmv-0.5-8.21.patch
patch -p1 -i advcpmv-0.5-8.21.patch
Biegać:
export FORCE_UNSAFE_CONFIGURE=1
./configure
make
Skopiować dwa pliki cpi mvloacated pod coreutils-8.21/src/do /usr/local/bin:
Zauważyłem, że ten post był nieco stary. Ale kiedy opracowałem rozwiązanie tego problemu, pomyślałem, że opublikuję swoje rozwiązanie.
Scenariusz: Mamy bardzo dużą strukturę katalogów, którą chcemy skopiować, dlatego wydajemy polecenie cp -R sourcedir destdir w jednym oknie terminala.
Otwórz inne okno terminala lub przesuń proces w tło (Ctrl+Z,bg<CR>), a następnie zróbmy wskaźnik postępu w getcie:
Najpierw otrzymujemy całkowity rozmiar struktury katalogów, którą chcemy skopiować, robimy to za pomocą:
du -sh /path/sourcedirectory/
Konwertuj wynik na gigabajty (G), a następnie podstaw n dla wyniku uzyskanego w zmiennej sizeize. Po wstawieniu źródła i katalogu docelowego (katalog docelowy) uruchom poniższe polecenie.
while true; do sourcesize=n destdir=/path/destinationdirectory/ copyprogress="$(export | du -sh $destdir | awk '{print $1}' | sed 's/[^0-9.]*//g' )" ; echo "scale=3 ; $copyprogress / $sourcesize * 100" | bc | xargs echo -n ; echo % completed ; sleep 10 ; done
Spowoduje to wydrukowanie postępu co 10 sekund z komunikatami takimi jak:
Wiem, że to rozwiązanie nie dotyczyło szybkości kopiowania, ale można by to dodać, rozszerzając powyższe polecenia, prawdopodobnie przekształcając je w skrypt bash, aby był łatwiejszy do odczytania. Na przykład sprawdzając, ile danych jest kopiowanych pr. W jednostce czasu prędkość powinna być prosta do obliczenia i wyświetlenia.
To jest naprawdę idealne dla mojego przypadku użycia, więc dziękuję za opublikowanie go! Chcę wiedzieć o postępach kopiowania ogromnego katalogu zawierającego tysiące plików, a nie tylko jeden plik, więc inne rozwiązania tak naprawdę mi nie pomagają.
Ibrahim,
Jest to świetne, szczególnie w przypadkach takich jak ten, którego obecnie doświadczam: zdalnie uruchomiłem ogromne zadanie mv, aby przenieść terrabajty kopii zapasowych z jednej puli pamięci do drugiej, bez wcześniejszego zastanowienia się nad konsekwencjami. Teraz mogę łatwo zorientować się w procesie i zajrzeć do niego. Niesamowite!
Riley
8
Aby poprawić odpowiedź Marco, dzisiaj napisałem tę wersję cpstat, aby można było skopiować wiele katalogów i użyć ostatniego parametru jako ścieżki docelowej. Zauważ, że jeśli użyjesz względnej głębokiej ścieżki jako źródła, możesz dzięki temu tarautomatycznie utworzyć to samo zależne drzewo katalogów.
function cpstat () {
tar -cf - "${@: 1: $#-1}" |
pv -s "$( du -cs -BK --apparent-size "${@: 1: $#-1}" |
tail -n 1 |
cut -d "$(echo -e "\t")" -f 1)" |
( cd "${@: $#}"; tar -xf - )
;}
To narzędzie jest poleceniem narzędzia Linux, które wyszukuje podstawowe polecenia coreutils (cp, mv, dd, tar, gzip / gunzip, cat itp.) Aktualnie uruchomione w systemie i wyświetla procent skopiowanych danych:
Zostało to już zasugerowane przez @AmrMostafa w listopadzie 14.
Dubu
2
Właśnie miałem przypadek, w którym procesor był mniej lub bardziej zablokowany z powodu błędu FUSE w odbierającym systemie plików.
Jeśli nie możesz po prostu przełączyć się z cp (tj. Ponieważ --sparse = always) i chcesz czegoś, co jest naprawdę wiarygodne dla postępu, przejdź przez / proc.
VCP - kopiuj pliki w interfejsie przekleństw (Pokaż pasek postępu w systemie Linux).
OPIS: vcp kopiuje pliki i katalogi w interfejsie curses, z wyjściem tylko tekstowym. jego opcje i dane wyjściowe są podobne do cp BSD, dodając jednocześnie kilka nowych funkcji.
Zawiera informacje na temat:
pliki skopiowane i pozostawione do skopiowania
zapisane dane i całkowity rozmiar danych
dane są zapisywane co sekundę
dwa paski stanu, jeden pokazuje aktualny status pliku, drugi całkowity status (z wyjątkiem 1 pliku, oba pokazują aktualny) i procent
rsync
zamiastcp
. Ma--progress
opcję.Midnight Commander
działa również dobrze i ma ładny tekstowy interfejs użytkownika z paskami postępu, ale może nie zostać zainstalowany. Spróbujmc
w wierszu polecenia. Oczywiście nie jestcp
.rsync
z--progress
właśnie sprawiło, że zrozumiałem, co się dzieje. Utknie, gdy osiągnie 100%, a następnie potrwa kilka minut. Myślę, że to samo dzieje się z nautilus. W każdym razie jest to już inne pytanie, więc najlepszą odpowiedzią na to pytanie jest:rsync --progress
pokazuje rozmiar,%, szybkość i czas, który upłynął.-W
opcją? na wszystkich moich hostachrsync
jest prawie tak szybki jakcp
... tak blisko, że regularnie używamrsync
zamiastcp
.Odpowiedzi:
rsync
ma flagę o nazwie,progress2
która pokazuje ogólny procent:źródło
--info=progress2
w końcu włączoneversion 3.1.0 protocol version 31
. Może mógłbyś edytować swoją odpowiedź, yzT.--info=progress2
że rsync płonie szybko! 200 MB / s, podczas gdy Windows nie przekracza 90 MB / s!--progress
. wersja rsync 3.0.9Jeśli dopuścisz inne narzędzia,
cp
to z pewnością jest to możliwe. Do jednego pliku możesz użyćpv
. To małe narzędzie zapewniające ładne statystyki.Jeśli masz wiele plików lub katalogów, możesz użyć tar:
Możesz owinąć go funkcją powłoki. Mniej pisać, a semantyka zbliżona do semantyki
cp
. Oto bardzo prosta (i nie odporna na błędy!) Funkcja:Zauważ, że niektóre wersje
tar
nie obsługują wyżej wspomnianej składni (np. Solaristar
) i musisz użyć następującego wariantu:Nazywasz to tak
Możesz go jeszcze bardziej ulepszyć, aby
pv
oszacować pozostały czas.Innym rozwiązaniem (jak wspomniano w komentarzu frostschutz) jest użycie rsync z
--progress
opcją:źródło
pv
nie wie, ile danych będzie przechodzić przez potok. Możesz to określić za pomocą-s
. Np najpierw zrobićdu -sh sourceDirectory
, aby uzyskać (szorstki) pomysł, a następnie przekazać jepv
w następujący sposób:pv -s 100m
.vbuf
(debian, ubuntu) jest znacznie szybszy niżpv
, prawdopodobnie ze względu na wirtualny bufor pierścieniowyvbuf
. Ale wydaje się, że obecnie jest on niestabilny w Debianie i dlatego często nie jest dostępny na serwerach, na których zwykle działa stabilna wersja Debiana.rsync
działa najlepiej do pokazywania postępu podczas postępu kopiowania.dawny:
źródło
Jak wyjaśniono w innych odpowiedziach, CP nie zapewnia tej funkcjonalności. Jednak postęp (wcześniej nazywany cv) to małe narzędzie, które jest bardzo pomocne w zapewnieniu tej brakującej funkcji.
Używam go od kilku miesięcy i jest solidny.
źródło
Tak, możliwe jest wyświetlanie postępu polecenia
cp
na terminalu.Metoda nr 1: (użyj
progress
)Otwórz nowy terminal i wpisz
progress
, aby wyświetlić postępcp
polecenia i innych poleceń, takich jak:cp, mv, dd, tar, cat, rsync, grep, fgrep, egrep, cut, sort, md5sum, sha1sum, sha224sum, sha256sum, sha384sum, sha512sum, adb, gzip, gunzip, bzip2, bunzip2, xz, unxz, lzma, unlzma, 7z, zcat, bzcat, lzcat, split, gpg
Jeśli nie instalować
progress
, można go zainstalować z repozytorium, na przykład wCentOS
tym poleceniem:yum -y install progress
.Następnie po uruchomieniu
cp
polecenia w tle lub pocp
normalnym uruchomieniu otwórz inny terminal, więc po prostu wypróbuj to polecenie:Zobacz dane wyjściowe:
Metoda nr 2: (użyj poprawki
cp
)Lub pobierz GNU
coreutils
i załataj go.Biegać:
Skopiować dwa pliki
cp
imv
loacated podcoreutils-8.21/src/
do/usr/local/bin
:Lub skopiuj go za pomocą menedżera plików jako root
Dodaj następujące wiersze do
~/.bashrc
:Wyloguj się i zaloguj
Pasek postępu może być wyświetlany bez
–g
lub–progress-bar
zgodnie z zaleceniami autoraZobacz dane wyjściowe:
Źródło: linuxhelp
źródło
cp
łatki: web.archive.org/web/20131115171331/http://beatex.org/web/…progress
poleceniaZauważyłem, że ten post był nieco stary. Ale kiedy opracowałem rozwiązanie tego problemu, pomyślałem, że opublikuję swoje rozwiązanie.
Scenariusz: Mamy bardzo dużą strukturę katalogów, którą chcemy skopiować, dlatego wydajemy polecenie cp -R sourcedir destdir w jednym oknie terminala.
Otwórz inne okno terminala lub przesuń proces w tło
(Ctrl+Z,bg<CR>)
, a następnie zróbmy wskaźnik postępu w getcie:Najpierw otrzymujemy całkowity rozmiar struktury katalogów, którą chcemy skopiować, robimy to za pomocą:
du -sh /path/sourcedirectory/
Konwertuj wynik na gigabajty (G), a następnie podstaw n dla wyniku uzyskanego w zmiennej sizeize. Po wstawieniu źródła i katalogu docelowego (katalog docelowy) uruchom poniższe polecenie.
Spowoduje to wydrukowanie postępu co 10 sekund z komunikatami takimi jak:
Wiem, że to rozwiązanie nie dotyczyło szybkości kopiowania, ale można by to dodać, rozszerzając powyższe polecenia, prawdopodobnie przekształcając je w skrypt bash, aby był łatwiejszy do odczytania. Na przykład sprawdzając, ile danych jest kopiowanych pr. W jednostce czasu prędkość powinna być prosta do obliczenia i wyświetlenia.
źródło
Aby poprawić odpowiedź Marco, dzisiaj napisałem tę wersję
cpstat
, aby można było skopiować wiele katalogów i użyć ostatniego parametru jako ścieżki docelowej. Zauważ, że jeśli użyjesz względnej głębokiej ścieżki jako źródła, możesz dzięki temutar
automatycznie utworzyć to samo zależne drzewo katalogów.źródło
Nie w standardowej wersji
cp
.Możesz ustawić tło cp i podać rozmiar podczas oczekiwania na
cp
zakończenie.Używam tego perla do monitorowania wzrostu pojedynczego pliku, ale działa on zewnętrznie na cp (lub cokolwiek innego, co robię)
źródło
Znalazłem to do użycia, działało świetnie:
z komentarza Mike'a na pytanie, jak sprawdzić postęp uruchamiania cp
źródło
Chociaż
rsync
da ci pewne statystyki postępu, jeśli chcesz pasek postępu, powinieneś użyćpv
.Możesz użyć
cpv
otokipv
z łatwiejszą składnią, bardziej podobną do tejcp
, której można użyć do rekurencyjnego kopiowania katalogówMożesz go zdobyć tutaj
źródło
pv
. Niezłe znalezisko!Użycie narzędzia takiego jak
mc
(dowódca północy) może być dobrą alternatywą dla innych odpowiedzi.Jest to prosty menedżer plików, który pokazuje postęp kopiowania / przenoszenia.
źródło
dd status=progress
Dodano opcję w GNU Coreutils 8.24+ (Ubuntu 16.04):
Stdout to okresowo aktualizowana linia, taka jak:
Zobacz także: Jak monitorujesz postęp dd? | Zapytaj Ubuntu
źródło
Innym prostym rozwiązaniem jest po prostu obejrzenie folderu wyjściowego w następujący sposób:
Linux / Cygwin:
watch -n 10 --differences du -sk --apparent-size <WATCHED_FOLDER>
FreeBSD:
gnu-watch -n 10 --differences du -sk <WATCHED_FOLDER>
To przydatne narzędzie uruchomi się
du
i podkreśli różnice.Innym potencjalnym rozwiązaniem byłoby napisanie prostego skryptu, który zapętla, wywołuje
du
i wylicza przybliżoną przepustowość.źródło
To narzędzie jest poleceniem narzędzia Linux, które wyszukuje podstawowe polecenia coreutils (cp, mv, dd, tar, gzip / gunzip, cat itp.) Aktualnie uruchomione w systemie i wyświetla procent skopiowanych danych:
https://github.com/Xfennec/cv
źródło
Właśnie miałem przypadek, w którym procesor był mniej lub bardziej zablokowany z powodu błędu FUSE w odbierającym systemie plików.
Jeśli nie możesz po prostu przełączyć się z cp (tj. Ponieważ --sparse = always) i chcesz czegoś, co jest naprawdę wiarygodne dla postępu, przejdź przez / proc.
źródło
Strona podręcznika VCP: https://linux.die.net/man/1/vcp
Pobierz vcp-2.2.tar.gz z:
http://distfiles.gentoo.org/distfiles/vcp-2.2.tar.gz
Zależność: curses.h (libncurses-dev).
W systemie Ubuntu zainstaluj:
lub
ZAINSTALUJ vcp:
Podręcznik:
źródło