Как показать ход и скорость передачи при копировании файлов с помощью cp?

В противном случае, существует ли какая-либо альтернативная утилита командной строки, которая может достичь этого?

Пока cp не имеет такой функциональности, вы можете использовать pv чтобы сделать это:

pv my_big_file > backup/my_big_file

Примечание: этот метод приведет к потере прав доступа к файлу и права собственности. Файлы, скопированные таким образом, будут иметь те же права доступа, как если бы вы создали их самостоятельно, и будут принадлежать вам.

В этом примере, pv в основном просто выводит файл в stdout *, который вы перенаправляете в файл с помощью > оператор. Одновременно он выводит информацию о ходе выполнения на терминал, когда вы это делаете.

Вот как это выглядит:

stefano@ubuntu:~/Data$ pv my_big_file > backup/my_big_file 138MB 0:00:01 [73.3MB/s] [=================================>] 100% 

Возможно, вам потребуется  Установить фотоэлектрическую (в качестве альтернативы введите sudo apt-get install pv) в вашей системе.


*: Техническая часть

В unix-подобной системе существует три важных потока данных: stdout (стандартный вывод), stderr (стандартная ошибка) и stdin (стандартный ввод). В каждой программе есть все три, так сказать. То > оператор перенаправления перенаправляет вывод программы в файл. Без аргументов, как вы видите выше, > перенаправляет программу стандартный выходной сигнал в файл. cp в принципе, не делает ничего более причудливого, чем

cat source > destination

(где cat просто считывает файл и печатает его в stdout). pv это так же, как cat, но если вы перенаправите его выходной поток куда-нибудь в другое место, вместо этого он выведет информацию о ходе выполнения в stdout.

Взгляните на man pv чтобы узнать об этом больше.


Другой вариант, как alt textВ предлагает в этот ответ, заключается в использовании rsync вместо:

$ rsync -ah --progress source-file destination-filesending incremental file listsource-file        621.22M  57%  283.86MB/s    0:00:01

Это сохранит права доступа к файлам / права собственности при отображении прогресса.

Там нет. Видеть здесь относительно того, почему. Хотя это делает больше, чем вам нужно, rsync имеет --progress параметр. То -a сохранит разрешения и т.д., и -h будет удобочитаемым для человека.

rsync -ah --progress source destination

Результат будет выглядеть примерно так:

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)

Если вы хотите проверить правильность передачи ваших файлов, вы можете использовать gcp и gcp это похоже на cp, но по умолчанию выдает вам индикатор выполнения, чтобы вы могли видеть, что копируется. В качестве программы вики-заметки, gcp имеет несколько полезных функций, таких как

  • индикация прогрессии передачи
  • непрерывное копирование при ошибке (переход к следующему файлу)
  • ведение журнала состояния копирования: gcp регистрирует все свои действия, чтобы можно было узнать, какие файлы были успешно скопированы.
  • искажение имен для обработки ограничений целевой файловой системы (например, удаление несовместимых символов "*" или "?" в FAT)

Однако, даже если индикатор выполнения при использовании инструмента достигнет 100%, вы должны дождаться повторного появления запроса терминала, прежде чем безопасно извлекать носитель, чтобы убедиться, что процесс передачи успешно завершен.

gcp используется для копирования файлов и имеет такие опции, как --preserve так что различные атрибуты и разрешения могут быть сохранены и --recursive так что целые каталоги могут быть скопированы. Более подробную информацию о его опциях можно найти, введя man gcp или отправившись в Справочные страницы Ubuntu онлайн. Также доступно учебное пособие на этом сайте.

Устанавливать gcp из репозиториев с

sudo apt-get install gcp

(Примечание: в Ubuntu 12.10 новая точка автоматического подключения, например, /media/user/usbdisk)

Вы можете скопировать файл на свой носитель, введя

gcp /home/mike/file.mp4 /media/usb

и скопируйте папку на свой носитель с помощью

gcp -rv ~/Podcasts /media/Mik2

Пример вывода из gcp с индикатором выполнения:

gcp ~/Videos_incIplayer/mars.flv /media/Mik2Copying 168.57 MiB 100% |########################################################|   7.98 M/s Time: 00:00:22

Конечно, вы можете указать несколько файлов или папок для копирования на свой диск, и есть множество других опций, описанных в man gcp.

Я получаю удовольствие от использования cURL именно для этой цели. На справочной странице указан поддерживаемый протокол "FILE", поэтому просто используйте его как любой другой протокол в URL-адресе:

curl -o destination FILE://source

Скорость, прогресс, оставшееся время и многое другое - все в знакомом формате.

Существует инструмент, называемый progress в репозиториях, которые могут просматривать различные команды и отображать информацию о ходе выполнения для них.

Установите его с помощью команды

sudo apt-get install progress

Этот инструмент можно использовать следующим образом:

cp bigfile newfile & progress -mp $!

Выход:

[11471] cp /media/Backup/Downloads/FILENAME.file         29.9% (24.2 MiB / 16 MiB)

Хотя он не отображает скорость, при копировании нескольких файлов -v вариант для cp команда предоставит вам информацию о ходе выполнения. например

cp -rv old-directory new-directory

Ядро знает большую часть данных, таких как скорость, а часто и процент. Современные ядра предоставляют это через свою файловую систему /proc.

показывать скорость от https://github.com/jnweiger/showspeed использует эту информацию. Он может подключаться к уже запущенным программам и предоставлять периодические обновления, подобные этому:

$ dd if=bigfile of=/tmp/otherbigfile &$ showspeed dddd looks like a process name. pid=4417 matches av0=dd.p/4417/fd/0r /home/jw/bigfile 113MB/s (12%, 2.3GB)  9m:35p/4417/fd/1w /tmp/otherbigfile 182MB/s (2.6GB)p/4417/fd/0r /home/jw/bigfile 285MB/s (15%, 3.0GB)  8m:08p/4417/fd/0r /home/jw/bigfile 115MB/s (16%, 3.2GB)  8m:01p/4417/fd/0r /home/jw/bigfile 107MB/s (17%, 3.4GB)  7m:39p/4417/fd/1w /tmp/otherbigfile 104MB/s (3.5GB)p/4417/fd/0r /home/jw/bigfile 139MB/s (19%, 3.7GB)  7m:37p/4417/fd/0r /home/jw/bigfile 116MB/s (20%, 3.9GB)  7m:18p/4417/fd/1w /tmp/otherbigfile  67MB/s (4.0GB)p/4417/fd/1w /tmp/otherbigfile 100MB/s (4.1GB)...

Пока pv может иметь дело с местными cp задач, используя dd с pv может иметь дело как с локальными (cp) и удаленный (scp) задачи.

dd if=path/to/source.mkv | pv | dd of=path/to/dest.mkv

Пожалуйста, убедитесь, что path/to/dest.mkv выходы с помощью touch path/to/dest.mkv

Это может показать прогресс, но если вам нужна информация о процентах,

dd if=path/to/source.mkv | pv -s 100M | dd of=path/to/dest.mkv

Заменять 100M выше с реальным размером вашего исходного файла.

А вот и Удаленная часть

Пока scp вряд ли можно показать текущий прогресс, используя dd с pv это проще простого.

ssh onemach@myotherhost dd if=path/to/source.mkv | pv -s 100M | dd of=path/to/dest.mkv

Если у вас есть rsync 3.1 или выше (rsync --version), вы можете копировать (cp -Rpn), сохраняя права доступа и права собственности, рекурсивные каталоги, "без помех" и отображать общий прогресс (вместо просто прогресса по файлам), скорость копирования и (очень приблизительное) расчетное время, оставшееся с:

sudo rsync -a --info=progress2 --no-i-r /source /destination

Обратите внимание, что sudo необходим только в том случае, если вы имеете дело с каталогами / файлами, которые вам не принадлежат. Кроме того, без --no-i-r, процент может быть сброшен до меньшего значения в какой-то момент во время копирования. Возможно, в более поздних версиях rsync по умолчанию будет использоваться значение no-i-r с info=progress2, но в текущей версии 3.1.2 этого не происходит.

Я обнаружил, что процент и оставшееся время сильно завышены при копировании в каталог, который уже содержит файлы (т.Е. например, когда вы обычно используете cp -n "без помех").

Появился новый инструмент под названием cv, который может найти любой дескриптор, связанный с запущенной командой, и показать прогресс и скорость:https://github.com/Xfennec/cv

cv -w

выводит статистику для всех запущенных операций cp, mv и т.д.

Повторяющийся вопрос: Is it possible to see cp speed and percent copied? - Unix & Linux Stack Exchange

В случае, если вы уже запустили команду “cp” и не хотите останавливать ее сейчас, вы можете “наблюдать” за увеличением размера пункта назначения следующим образом: command line - How to show the transfer progress and speed when copying files with cp? - Ask Ubuntu (`смотрите “du -hs”), чтобы знать, что он действительно растет и копия работает.