W przeciwnym razie, czy istnieje jakieś alternatywne narzędzie wiersza poleceń, które może to osiągnąć?
W przeciwnym razie, czy istnieje jakieś alternatywne narzędzie wiersza poleceń, które może to osiągnąć?
Odpowiedzi:
Chociaż cpnie ma tej funkcji, możesz pvto zrobić:
pv my_big_file > backup/my_big_file
Uwaga: ta metoda spowoduje utratę uprawnień i własności pliku. Pliki skopiowane w ten sposób będą miały takie same uprawnienia, jak gdybyś je utworzył i będą należeć do Ciebie.
W tym przykładzie pvpo prostu wyprowadza plik na standardowe wyjście *, które przekierowujesz do pliku za pomocą >operatora. Jednocześnie, kiedy to robisz, drukuje informacje o postępie na terminalu.
Tak to wygląda:
stefano@ubuntu:~/Data$ pv my_big_file > backup/my_big_file
138MB 0:00:01 [73.3MB/s] [=================================>] 100%
Może być konieczne zainstalowanie pv (alternatywnie wpisz
sudo apt-get install pv) w systemie.
*: Bit techniczny
Istnieją trzy ważne strumienie danych w systemie uniksopodobnym: stdout (standardowe wyjście), stderr (standardowy błąd) i stdin (standardowe wejście). Każdy program ma wszystkie trzy, że tak powiem. >Operatorem przekierowania przekierowania wyjście programu do pliku. Bez argumentów, jak widać powyżej, >przekierowuje standardowe wyjście programu do pliku. cpw zasadzie nie robi nic bardziej wyszukanego niż
cat source > destination
(gdzie catpo prostu odczytuje plik i drukuje go na standardowe wyjście). pvjest jak cat, ale jeśli przekierujesz jego strumień wyjściowy w inne miejsce, zamiast tego wypisze informacje o postępie na standardowe wyjście.
Spójrz na, man pvaby dowiedzieć się więcej na ten temat.
Inną opcją, jak sugeruje
DoR w tej odpowiedzi , jest użycie rsync zamiast:
$ rsync -ah --progress source-file destination-file
sending incremental file list
source-file
621.22M 57% 283.86MB/s 0:00:01
Pozwoli to zachować uprawnienia do plików / prawa własności podczas wyświetlania postępu.
alias cp="rsync -avz"cp jest nieaktualny.
pv, możesz zajrzeć do niego /proc/PID of cp/fdi /proc/PID of cp/fdinfodowiedzieć się o postępach. (Do ciebie należy ustalenie prędkości.) Używam tej techniki do oglądania updatedb.
-zprawdopodobnie powinien być używany tylko do kopii sieciowych; kompresowanie i dekompresowanie danych dla lokalnej kopii jest czystym narzutem.
rsyncpamiętaj, aby nie dodawać końcowego /do ścieżki źródłowej (lub usuń, jeśli np. Zakończenie bash umieści go tam automatycznie). W przeciwnym razie otrzymasz wyniki inne niż podczas używania cp(lub gcp).
Nie ma Zobacz tutaj, dlaczego. Chociaż robi więcej, niż potrzebujesz, rsyncma --progressparametr. -aZachowa uprawnienia, itp, i -hbędzie czytelny dla człowieka.
rsync -ah --progress source destination
Dane wyjściowe będą wyglądać mniej więcej tak:
Pictures/1.jpg
2.13M 100% 2.28MB/s 0:00:00 (xfr#5898, to-chk=1/5905)
Pictures/2.jpg
1.68M 100% 1.76MB/s 0:00:00 (xfr#5899, to-chk=0/5905)
-rflagę do ponownego wyświetlania katalogów. Może być nawet aliasowany jako bezpośredni zamiennik cp:alias cp="rsync -ah --progress"
--progresspowoduje, że moja głowa obraca się 🙃, obserwując cały wyświetlacz wyjściowy w terminalu. Więc ci, którzy przychodzą tutaj z wyszukiwań słów kluczowych AOL, rsync -ah --info=progress2 [source] [destination] przedstawiają wyniki w nieco bardziej rozsądny sposób IMHO.
Jeśli chcesz sprawdzić, czy pliki są przesyłane poprawnie, możesz użyć gcpi gcpprzypomina cp, ale domyślnie wyświetla pasek postępu, dzięki czemu możesz zobaczyć, co jest kopiowane. Jak zauważa strona wiki programu , gcpma kilka przydatnych funkcji, takich jak
- wskazanie postępu transferu
- ciągłe kopiowanie w przypadku błędu (przejście do następnego pliku)
- kopiuj rejestrowanie statusu: gcp rejestruje wszystkie swoje działania, aby można było wiedzieć, które pliki zostały pomyślnie skopiowane
- manipulowanie nazwami w celu obsługi ograniczeń docelowych systemów plików (na przykład usuwanie niekompatybilnych znaków „*” lub „?” w systemie FAT)
Jednak nawet gdy pasek postępu osiągnie 100% podczas korzystania z narzędzia, musisz poczekać, aż pojawi się ponownie monit terminala, zanim bezpiecznie usuniesz nośnik, aby mieć pewność, że proces przesyłania zakończy się pomyślnie.
gcpsłuży do kopiowania plików i ma takie opcje, --preserveże można zachować różne atrybuty i uprawnienia oraz --recursiveskopiować całe katalogi. Więcej informacji na temat jego opcji można znaleźć, wchodząc man gcplub przechodząc do stron internetowych Ubuntu online . Samouczek jest również dostępny na tej stronie .
Zainstaluj gcpz repozytoriów za pomocą
sudo apt-get install gcp
( Uwaga : w Ubuntu 12.10 nowym punktem automount jest na przykład /media/user/usbdisk)
Możesz skopiować plik na swój nośnik, wprowadzając
gcp /home/mike/file.mp4 /media/usb
i skopiuj folder na swoje media za pomocą
gcp -rv ~/Podcasts /media/Mik2
Przykładowe dane wyjściowe z gcppaska postępu:
gcp ~/Videos_incIplayer/mars.flv /media/Mik2
Copying 168.57 MiB 100% |########################################################| 7.98 M/s Time: 00:00:22
Możesz oczywiście określić wiele plików lub folderów do skopiowania na dysk, a także wiele innych opcji man gcp.
dbus.exceptions.DBusException: org.freedesktop.DBus.Error.NotSupported: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11
export DISPLAY=:0.0przed uruchomieniem gcp. Jeśli maszyna jest bezgłowa, musiałbyś rozpocząć xsession w wirtualnym buforze ramek lub coś takiego, w tym momencie prawdopodobnie powinieneś po prostu poszukać innego programu
gcpjest całkiem przyzwoity, ale wymaganie DBUS / X jest dziwne. Poradziłem sobie z tym za pośrednictwem SSH, używając przekazywania dalej ssh: ssh -X user@hosti to pozwoliło mi go uruchomić.
Mam problem z użyciem cURL do tego właśnie celu. Strona podręcznika zawiera listę obsługiwanych protokołów „PLIK”, więc po prostu używaj go jak każdego innego protokołu w adresie URL:
curl -o destination FILE://source
Szybkość, postęp, pozostały czas i więcej - wszystko w znanym formacie.
pv, że nie uratuje uprawnienia.
Chociaż nie wyświetla prędkości, podczas kopiowania wielu plików, -vopcja do cppolecenia zapewni informacje o postępie. na przykład
cp -rv old-directory new-directory
Jądro zna większość danych, takich jak prędkość, a często także procent. Nowoczesne jądra udostępniają to poprzez swój system plików / proc.
showspeed z https://github.com/jnweiger/showspeed korzysta z tych informacji. Może łączyć się z już działającymi programami i okresowo aktualizować:
$ dd if=bigfile of=/tmp/otherbigfile &
$ showspeed dd
dd looks like a process name. pid=4417 matches av0=dd.
p/4417/fd/0r /home/jw/bigfile 113MB/s (12%, 2.3GB) 9m:35
p/4417/fd/1w /tmp/otherbigfile 182MB/s (2.6GB)
p/4417/fd/0r /home/jw/bigfile 285MB/s (15%, 3.0GB) 8m:08
p/4417/fd/0r /home/jw/bigfile 115MB/s (16%, 3.2GB) 8m:01
p/4417/fd/0r /home/jw/bigfile 107MB/s (17%, 3.4GB) 7m:39
p/4417/fd/1w /tmp/otherbigfile 104MB/s (3.5GB)
p/4417/fd/0r /home/jw/bigfile 139MB/s (19%, 3.7GB) 7m:37
p/4417/fd/0r /home/jw/bigfile 116MB/s (20%, 3.9GB) 7m:18
p/4417/fd/1w /tmp/otherbigfile 67MB/s (4.0GB)
p/4417/fd/1w /tmp/otherbigfile 100MB/s (4.1GB)
...
pkill -USR1 ddaby ddpokazać jego status, inną opcją byłoby watch -n 1 pkill -USR1 ddokresowe pokazywanie postępu (co sekundę).
W progressrepozytoriach istnieje narzędzie wywoływane, które może badać różne polecenia i wyświetlać dla nich informacje o postępach.
Zainstaluj go za pomocą polecenia
sudo apt-get install progress
Tego narzędzia można użyć w następujący sposób:
cp bigfile newfile & progress -mp $!
Wynik:
[11471] cp /media/Backup/Downloads/FILENAME.file
29.9% (24.2 MiB / 16 MiB)
Chociaż pvmoże poradzić sobie z cpzadaniami lokalnymi , używanie ddz pvmoże poradzić sobie zarówno z zadaniami lokalnymi ( cp), jak i zdalnymi ( scp).
dd if=path/to/source.mkv | pv | dd of=path/to/dest.mkv
Upewnij się, że path/to/dest.mkvwyjścia dotouch path/to/dest.mkv
Może to pokazywać postęp, ale jeśli chcesz uzyskać informacje procentowe,
dd if=path/to/source.mkv | pv -s 100M | dd of=path/to/dest.mkv
Zamień 100Mpowyżej na rzeczywisty rozmiar pliku źródłowego.
Podczas gdy scpledwo widać aktualny postęp, używanie ddwith pvto bułka z masłem.
ssh onemach@myotherhost dd if=path/to/source.mkv | pv -s 100M | dd of=path/to/dest.mkv
Istnieje nowe narzędzie o nazwie cv, które może znaleźć dowolny deskryptor związany z uruchomionym poleceniem i pokazać postęp i prędkość: https://github.com/Xfennec/cv
cv -w
wyświetla statystyki wszystkich uruchomionych operacji cp, mv itp
watch cv -qjest jeszcze
cpkatalog rekurencyjnie kopiuje, czy nie.
Jak wielu powiedziało, CP nie zawiera tej funkcjonalności.
Żeby rzucić 0,02 $, co zwykle robię z trywialnymi sytuacjami kopiowania (tj. Nie -R):
Zobacz, jak duży jest ten plik i pamiętaj
Rozpocznij kopiowanie
Otwórz inny terminal
Uruchom watch ls -lh DIRkatalog, w którym znajduje się cel
Dzięki temu mogę informować mnie na bieżąco o rozmiarze pliku docelowego, bez większych problemów.
Jako alternatywę dla mniej trywialnych sytuacji, np. Rekurencyjnego kopiowania katalogów, możesz użyć, watch du -hs DIRaby zobaczyć podsumowanie rozmiaru DIR. Jednak du może długo obliczać, a nawet spowalniać kopiowanie, więc możesz użyć -n INTERVALargumentu do oglądania, aby kompromis był akceptowalny.
Aktualizacja: Jeśli używasz symboli wieloznacznych z poleceniem używanym z watch du, np. watch du -hs backup/*Nie zapomnij zacytować:
watch "du -hs backup/*"
w przeciwnym razie symbole wieloznaczne zostaną rozwinięte tylko raz , gdy zegarek zostanie uruchomiony, więc du nie będzie patrzeć na nowe pliki / podkatalogi.
dd status=progress
Dodano opcję w GNU Coreutils 8.24+ (Ubuntu 16.04):
dd if=src of=dst status=progress
Terminal pokazuje linię typu:
462858752 bytes (463 MB, 441 MiB) copied, 38 s, 12,2 MB/s
Zobacz także: Jak monitorujesz postęp dd?
Jeśli masz rsync w wersji 3.1 lub nowszej ( rsync --version), możesz kopiować (cp -Rpn), zachowując uprawnienia i własność, rekurencyjne katalogi, „bez blokowania” i wyświetlać ogólny postęp (zamiast po prostu postęp po pliku), szybkość kopiowania i ( bardzo szorstki) szacowany czas pozostały przy:
sudo rsync -a --info=progress2 --no-i-r /source /destination
Pamiętaj, że sudo jest potrzebne tylko w przypadku katalogów / plików, których nie posiadasz. Poza --no-i-rtym wartość procentowa może zostać zresetowana do niższej liczby w pewnym momencie podczas kopiowania. Być może późniejsze wersje rsync będą domyślnie ustawione na no-ir z info = progress2, ale nie ma go w obecnej wersji 3.1.2.
Przekonałem się, że procent i pozostały czas są rażąco zawyżone podczas kopiowania do katalogu, który już zawiera pliki (np. Kiedy zwykle użyjesz cp -n „no clobber”).
Użyj skryptu powłoki:
#!/bin/sh
cp_p()
{
strace -q -ewrite cp -- "${1}" "${2}" 2>&1 \
| awk '{
count += $NF
if (count % 10 == 0) {
percent = count / total_size * 100
printf "%3d%% [", percent
for (i=0;i<=percent;i++)
printf "="
printf ">"
for (i=percent;i<100;i++)
printf " "
printf "]\r"
}
}
END { print "" }' total_size=$(stat -c '%s' "${1}") count=0
}
Będzie to wyglądać następująco:
% cp_p /home/echox/foo.dat /home/echox/bar.dat
66% [===============================> ]
W zależności od tego, co chcesz zrobić, Midnight Commander ( mc) może być odpowiedzią. Dziwię się, że jeszcze nie wspomniano.
Narzędzia takie jak pvlub rsyncsą dobre do wyświetlania postępu transferu jednego dużego pliku, ale jeśli chodzi o kopiowanie całych katalogów / drzew, mcoblicza rozmiar, a następnie bardzo ładnie wyświetla postęp. Ponadto jest dostępny od razu po wyjęciu z pudełka na większości systemów.
może być jeszcze jedna opcja zachowania atrybutów (jeśli sourcejest to folder, w którym zostanie utworzony destination)
tar -c source | pv -e -t -p -r | tar -C destination -x
mam nadzieję, że może się komuś przydać. Aby oszacować czas transferu, można to zrobić do -s sourcez wyprzedzeniem i przekazując go jako -s <size>parametr do pv.
-f -jest zbędny. tarDomyślne wyjście ci wejście dla xto stdout i stdin.
Sprawdź kod źródłowy paska postępu w poniższym repozytorium git
https://github.com/Kiran-Bose/supreme
Wypróbuj również niestandardowy pakiet skryptu bash najwyższy
Pobierz plik deb i zainstaluj w dystrybucji opartej na Debianie lub pobierz pliki źródłowe, zmodyfikuj i użyj dla innych dystrybucji
Przegląd funkcjonalności
(1) Otwórz aplikacje ---- Firefox ---- Kalkulator ---- Ustawienia
(2) Zarządzaj plikami ---- Wyszukaj ---- Nawiguj ---- Szybki dostęp
|----Select File(s)
|----Inverse Selection
|----Make directory
|----Make file
|----Open
|----Copy
|----Move
|----Delete
|----Rename
|----Send to Device
|----Properties
(3) Zarządzaj telefonem ---- Przenieś / Kopiuj z telefonu ---- Przenieś / Kopiuj do telefonu ---- Synchronizuj foldery
(4) Zarządzaj USB ---- Przenieś / Kopiuj z USB ---- Przenieś / Kopiuj na USB
pv wie, jak oglądać deskryptory plików z danym pidem, niezależnie od tego, czy jest to cp, czy coś innego
Z dokumentacji:
(Linux only): Watching file descriptor 3 opened by another process 1234:
pv -d 1234:3
(Linux only): Watching all file descriptors used by process 1234:
pv -d 1234
Przykład:
md5sum file &
[1] + 1271 suspended
pv -d 1271
417MiB 0:00:17 [12,1MiB/s] [============> ] 29% ETA 0:00:53
$ cp file.mov copy.mov &
[2] 3731
$ pv -d 3731
3:/media/windows/file.mov: 754MiB 0:00:04 [97,2MiB/s] [======================> ] 52% ETA 0:00:07
4:/media/windows/copy.mov: 754MiB 0:00:04 [97,3MiB/s] [ <=> ]
pvnie obsługuje uprawnień w taki sam sposób jakcp... (w oparciu o jeden szybki test, który próbowałem:pvnie kopiowałem bitów wykonawczych przez ...rsynczrobiłem.