Czy przy przenoszeniu dużych katalogów mv
można sprawdzić postęp (%)? cp
Komenda na Gentoo miał -g
przełącznik, który pokazał postępy.
command-line
mv
progress-information
letronje
źródło
źródło
Odpowiedzi:
Możesz zbudować załatane cp i mv, które następnie obsługują przełącznik -g, aby pokazać postęp. Na tej stronie znajdują się instrukcje i łatki . Jednak : strona nakazuje ci to zrobić
który zastępuje oryginalne cp i mv. Ma to dwie wady: Po pierwsze, jeśli zaktualizowany pakiet coreutils dotrze do twojego systemu, zostaną one zastąpione. Po drugie, jeśli problem z łataną wersją może spowodować uszkodzenie skryptów opartych na standardowych procesorach cp i mv. Wolałbym zrobić coś takiego:
który kopiuje pliki do / usr / local / bin, który jest przeznaczony dla programów skompilowanych przez użytkownika i nadaje im inną nazwę. Więc jeśli chcesz pasek postępu, mów
mvg -g bigfile /mnt/backup
i używaj mv normalnie.Możesz to zrobić
alias mvg="/usr/local/mvg -g"
, wystarczy powiedziećmvg bigfile /mnt/backup
i bezpośrednio uzyskać pasek postępu.źródło
Nie podoba mi się pomysł, aby zastąpić pliki binarne z coreutil, gdy istnieją prostsze rozwiązania, więc oto moje:
rsync : Rsync kopiuje pliki i ma
-P
przełącznik paska postępu. Więc jeśli masz zainstalowany rsync, możesz użyć prostego aliasu w pliku dots powłoki:Minusem jest to, że rsync jest trochę wolniejszy niż cp, ale powinieneś zmierzyć to z czasem i zdecydować sam, mogę z tym żyć :-)
Skrypt powłoki : Skrypt powłoki może również utworzyć pasek postępu. Znalazłem to jakiś czas temu w sieci i nie pamiętam źródła:
Będzie to wyglądać następująco:
pasek :
bar
jest małym skryptem powłoki wyświetlającym pasek procesu dla wszelkiego rodzaju operacji (cp, tar itp.). Przykłady można znaleźć na stronie głównej projektu.Jest również napisany dla skorupy Bourne'a, więc będzie działać wszędzie w pobliżu.
źródło
bar
mv
jeszcze się nie zawija .rsync
nie zastępujemv
całkowicie (pyta o to OP), szczególnie jeśli chodzi o szybkie kopiowanie w systemach plików typu kopiuj przy zapisiebtrfs
.Istnieje nowe narzędzie o nazwie,
progress
które może znaleźć dowolny deskryptor związany z uruchomionym poleceniem i pokazać postęp i prędkość: dostępne tutajwyświetla statystyki wszystkich uruchomionych operacji cp, mv itp
źródło
progress
po instalacji, co pokazało mi postęp wmv
poleceniu, na które aktualnie czekałem. Dzięki!sudo
(chyba tego samego użytkownika) - możesz również użyć,watch
aby powiedzieć, co się dzieje co 2 sekundy:watch progress -w
watch progress -w
ciebie możesz też po prostu użyćprogress -m
Możesz użyć polecenia podglądu rur,
pv
aby wyświetlić pasek postępu:Często używam tego skopiować duży plik na zamontowanym systemie plików sieci (w połączeniu z
gzip
atar
). Wadą jest to, że można skopiować tylko jeden plik, a nie katalog. I musisz nadać nowemu plikowi nazwę, nie możesz tak po prostu nadać katalogowi docelowemucp
. Jednak kopiowanie niepv
jest celem. Jest to potężne narzędzie i pozwala na znacznie więcej niż kopiowanie plików. Zobacz stronę główną, aby uzyskać więcej przykładówpv
.O wiele lepszą opcją jest użycie
rsync -aP
. Jeśli chceszmv
, dodaj flagę--remove-source-files
. Dodaj to do swojego,.bashrc
jeśli chcesz często używać poleceń:Minusem tutaj jest to, że rsync pokazuje tylko postęp, a nie pasek postępu.
źródło
tar cf - source-dir | pv | tar xf - -C out-dir
da ci przepustowość całego katalogu. Jeśli znasz rozmiar i przejdziesz-s
do pv, może również dać ci postęp.Jeśli Twoim celem jest przeniesienie / skopiowanie katalogu z paskiem postępu, ale unikanie nieterminowego GUI, dobrym wyborem jest mc (Midnight Commander).
źródło
Moim rozwiązaniem jest użycie
rsync
. Może kopiować katalogi, usuwać pliki źródłowe po udanej kopii („przenosząc” je) i wyświetlać raporty postępu, a także wiele innych funkcji (w szczególności synchronizację częściowo skopiowanych katalogów i pracę w sieci).Oto jak przenieść katalog za pomocą rsync z raportem postępu:
Upewnij się,
$src
że nie kończy się odwrotnym ukośnikiem, w przeciwnym razie uzyskasz inne znaczenie niż GNUcp
.rm -r
Na koniec jest potrzebny, ponieważ--remove-source-files
usuwa tylko pliki źródłowe, po każdym z nich jest z powodzeniem skopiowane, nie katalogi.&&
Pilnuje, aby go uruchomić tylko wtedy, gdy rsync zakończy się pomyślnie. Jeśli jesteś paranoikiem, możesz go zastąpić pewnego rodzaju rekurencyjnymrmdir
, takim jakfind $src -d -exec rmdir {} +
Jedynym błędem jest to, że
-P
opcja pokazuje postęp dla każdego pliku, a nie dla całej operacji kopiowania. Może to być bezużyteczne, jeśli próbujesz przenieść katalog z wieloma małymi plikami. Najnowsza wersja programistyczna rsync ma alternatywną flagę,--info=progress2
która pokazuje postęp dla całej operacji.źródło
Aby uniknąć łatania coreutil, aby dodać pasek postępu do
mv
icp
,gcp
(Cooffier Goffiego) jest nową alternatywą: http://wiki.goffi.org/wiki/Gcp/enUżywać w taki sam sposób, jak w
cp
przypadku opcji-r
rekurencyjności i-v
gadatliwości.Używa kolejki plików, gdy wiele poleceń jest wywoływanych jednocześnie. Pozwala także na zapisywanie skopiowanych nazw plików w dzienniku, zobacz sekcję Strona man oszczędzania źródła, aby uzyskać szczegółowe informacje.
Oto dobry poradnik na początek
gcp
: http://mylinuxbook.com/gcp-advanced-command-line-file-copier-inspired-by-cp/źródło
Po pierwsze: nigdy nie kopiuję dużych plików bez użycia ionice, chyba że wiem, że nie będę chciał korzystać z komputera przez pół godziny lub dłużej.
Po drugie: wszystkie moje partycje są uporządkowane, więc kopiowanie wewnątrz partycji nie zajmuje czasu. Jeśli jest to długa kopia, robię a
du -sm
na plikach idf -m | grep copy_to_partition
. Następnie, jeśli jestem ciekawy, ile czasu zajmie, zrobię todf
ponownie i zobaczę, ile plików zostało skopiowanych.źródło
Na mojej Mennicy lubię używać gcp na tym lub lokówkach (co jest naprawdę fajne)
Może być konieczne jego zainstalowanie
sudo apt-get install gcp
I bardzo ładne i doskonałe zadanie dla paska postępu z informacjami o
w ładnym czytelnym formacie jest:
Być może trzeba go najpierw zainstalować
sudo apt-get install curl
źródło
gcp
nie obsługuje przenoszenia pliku, tzn. pliki źródłowe muszą zostać usunięte ręcznie po udanym skopiowaniu.Nie daje to paska postępu, ale trafia,
CTRL-T
a wyśleszSIGINFO
domv
, który poinformuje, nad którym plikiem pracuje i jak daleko jest w tym procesie. Jest to bardzo przydatne w przypadku dużych transferów plików, być może nie jest tak przydatne w przypadku przesyłania wielu małych plików.Szybki przykład:
źródło
INFO: unknown signal; killall -l lists signals.
wrażenie, że SIGINFO działa tylko na niektórych BSD, a nie na standardowym POSIX.Służy
mv -v
do drukowania jednej linii na przeniesiony plik ipv -l
drukowania postępu na podstawie liczby linii (w efekcie liczby plików).Będziesz potrzebować
pv
(przeglądarka potoków): http://www.ivarch.com/programs/pv.shtmlUżyj następującego polecenia, aby uzyskać liczbę plików:
To polecenie wyświetli informacje o postępach na podstawie liczby skopiowanych plików. Działa to najlepiej, jeśli istnieje wiele małych plików. Jeśli jest tylko kilka plików, które są ogromne, nie będziesz się dobrze bawić.
Pamiętaj, że
mv
na tej samej partycji powinna być szybka.mv
do innej partycji będzie taki sam, jakcp source target
porm source
. Oto dwa polecenia do kopiowania katalogów z informacjami o postępie.aby zgłosić postęp na podstawie liczby skopiowanych plików:
aby zgłosić postęp na podstawie skopiowanych bajtów:
Aby uzyskać więcej informacji, zobacz tutaj: informacje o postępach za pośrednictwem pv do kopiowania katalogu
źródło
Niezmiennie kończę na szukaniu tej odpowiedzi po uruchomieniu polecenia „mv”, w którym to momencie nie chcę go ponownie uruchamiać. Jeśli znajdujesz się w tej sytuacji, bardzo prosty sposób na monitorowanie postępu (lub sprawdzenie, czy jest wystarczająco daleko, aby nie warto zabijać), to uruchomić:
Spowoduje to po prostu wydrukowanie rozmiaru katalogu, abyś mógł zobaczyć, ile danych zostało skopiowanych, lub możesz uruchomić go kilka razy, aby zobaczyć, jak szybko dane są przesyłane.
źródło