Действительно ли возможно видеть скорость CP и скопированный процент?

Я обычно использую *.txt для общих текстовых файлов, out.build.NN для вывода от сборки, *.lst поскольку новая строка разграничила последовательность, это будет питаться в программу (как xargs) и programname.log для вывода из продолжительных программ. И я использую много чисел (a'la out.build.NN) если я буду последовательно запускать ту же программу многократно. Но это - просто моя собственная конвенция.

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

261
13.03.2016, 00:13
16 ответов

rsync назвали флаг progress2 который показывает полный процент:

rsync --info=progress2 source dest
206
27.01.2020, 19:27
  • 1
    info=progress2 все еще не превратил его в репозиторий по умолчанию, и здесь это - 2015. Походит на хорошую идею. –  Lonniebiz 01.04.2015, 11:27
  • 2
    --info=progress2 наконец включенный в version 3.1.0 protocol version 31. Возможно, Вы могли отредактировать свой ответ, yzT. –  Sopalajo de Arrierez 10.05.2015, 00:14
  • 3
    я заметил от --info=progress2 это rsync сверкает быстро! 200 МБ/с, в то время как Windows goesn't далее, чем 90 МБ/с! –  ReneFroger 28.06.2016, 21:12
  • 4
    @ReneFroger, хотя это могло бы быть реальной скоростью (в зависимости от устройства), часто в Linux, что высокая скорость является действительно ложью, и после копии, был закончен, система все еще пишет в устройство, в отличие от этого, в Windows, что можно извлечь устройство почти сразу. При копировании больших файлов, можно заметить, как это запускается в той высокой скорости, но затем это понижается до стандартного. –  eez0 29.06.2016, 08:46
  • 5
    , с которым он работал на меня просто --progress. версия 3.0.9 –  adrianTNT 08.03.2017, 19:11

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

pv inputfile > outputfile

Если у Вас есть несколько файлов или каталогов, можно использовать tar:

tar c sourceDirectory | pv | tar x -C destinationDirectory

Можно перенести его в функцию оболочки. Это меньше для ввода, и Вы получаете семантику близко к тем cp. Вот очень простое (и не защищенный от ошибки!) функция:

cpstat () {
  tar c "$1" | pv | tar x -C "$2"
}

Обратите внимание что некоторые версии tar не поддерживайте вышеупомянутый синтаксис (например, Солярис tar) и необходимо использовать следующий вариант:

cpstat () {
  tar cf - "$1" | pv | (cd "$2";tar xf -)
}

Вы называете его как это

cpstat sourceDirectory destinationDirectory

Можно улучшить его далее, так, чтобы pv обеспечивает оценку остающегося времени.

Другое решение (как frostschutz упомянутый в комментарии) состоит в том, чтобы использовать rsync с --progress опция:

rsync --progress -a sourceDirectory destinationDirectory
103
27.01.2020, 19:27
  • 1
    cpstat входит в pastebin =) –  Matt 17.02.2013, 16:57
  • 2
    Это даст Вам скорость передачи, но не ETA, потому что pv не знает, сколько данных проникнет через канал. Можно указать это использование -s. Например, сначала сделайте du -sh sourceDirectory получить (грубую) идею и затем передать его pv, как это: pv -s 100m. –  Jan Fabry 11.05.2014, 18:25
  • 3
    info=progress2 дает Вам статистику прогресса уровня каталога. –  AlexLordThorsen 06.12.2014, 01:40
  • 4
    vbuf (debian, человечность), хороший бит быстрее, чем pv, вероятно, из-за его виртуального кольцевого буфера –  Skaperen 04.10.2015, 13:56
  • 5
    @Skaperen я не знаю vbuf. Но поскольку кажется, что это находится в Debian, нестабильном в данный момент и поэтому часто не доступно на Серверах, которые обычно выполняют стабильный Debian. –  Marco 04.10.2015, 21:35

Не в стандартной версии cp.

Вы могли фон CP и перечислять размер при ожидании cp закончиться.

Я использую этот жемчуг для контроля роста единственного файла, но он работает внешне к CP (или независимо от того, что я делаю),

6
27.01.2020, 19:27

rsync работает лучшее на показ прогресса во время прогресса копирования.

исключая:

rsync -avh --progress sourceDirectory destinationDirectory
62
27.01.2020, 19:27

заметил, что эта публикация была несколько старым. Но, как я сделал решение вопросу под рукой, я думал, что выложу свое решение.

Сценарий: у нас очень большая структура каталога, которую мы хотим скопировать, поэтому мы выпускаем команду cp -r sourcedir destdir в одно окно терминала.

Откройте другое окно терминала или подтолкните процесс на фоновом режиме (Ctrl + Z, BG ) , а затем давайте сделаем индикатор прогресса в качестве способом гетто:

мы сначала получим общий размер Из структуры каталогов, которую мы хотим скопировать, вы делаете это с:

DU -SH / PATH / SOUSHCEDIRECTORY /

Преобразовать результат к гигабатам (G), затем замените N для результата, который вы попали в вариабельные источники. Отказ После того, как вы вставили источники и DestDir (каталог назначения), запустите команду ниже.

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

Это будет распечатать прогресс каждые 10 секунд с такими сообщениями, такими как:

0.100% completed
0.200% completed
0.300% completed 
... etc

Я знаю, что это решение не устраивало скорость копирования, но можно было бы добавить, что, расширяя команды выше, возможно, делая Это в скрипт Bash, так что было бы легче читать. Например, проверяя, сколько данных копируется PR. N Устройство, скорость должна быть тривиальной для расчета и отображения.

14
27.01.2020, 19:27

Как объяснено в других ответах, CP не обеспечивает ту функциональность. Однако прогресс (раньше названная условная цена) является мелким инструментом, который очень полезен в обеспечении этой недостающей возможности.

Этот инструмент может быть описан как Крошечный Грязный Linux Только* команда C, которая ищет coreutils основные команды (CP, mv, dd, tar, gzip/gunzip, кошка...) в настоящее время работа вашей системы и отображает процент скопированных данных.

я использовал его в течение прошлых нескольких месяцев, и это твердо.

29
27.01.2020, 19:27

Для улучшения ответа Марко, сегодня я написал эту версию CPStat , поэтому вы можете скопировать много каталогов и использовать последний параметр в качестве пути назначения. Обратите внимание, что если вы используете относительный глубокий путь в качестве источника, вы можете благодарить TAR , автоматически создавать одно и то же зависимое дерево каталогов.

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 - )

;}
8
27.01.2020, 19:27

Это утилита Linux, которая ищет базовые команды coreutils (cp, mv, dd, tar, gzip/gunzip, cat и т.д.), выполняемые в настоящее время на Вашей системе, и отображает процент скопированных данных:

https://github.com/Xfennec/cv

3
27.01.2020, 19:27

Другое простое решение - просто посмотреть выходную папку следующим образом:

Linux/Cygwin: watch -n 10 --differences du -sk --apparent-size

FreeBSD: gnu-watch -n 10 --differences du -sk

Эта удобная утилита запустит du и выделит различия.

Другим потенциальным решением может быть написание простого скрипта, который будет циклически вызывать du и выдавать приблизительную оценку пропускной способности.

4
27.01.2020, 19:27

Я нашел это для использования, работает отлично:

sudo watch lsof -p`pgrep -x cp`

из комментария Mike на вопрос как проверить прогресс выполнения cp

5
27.01.2020, 19:27

Использование такого инструмента, как mc (полуночный командир), может быть хорошей альтернативой другим ответам.

Это простой файловый менеджер, показывающий прогресс копирования / перемещения.

4
27.01.2020, 19:27

Можно ли увидеть скорость копирования и процент копирования?

Да, можно отобразить ход выполнения команды cp на терминале.


Метод №1: (используйте progress )

Откройте новый терминал и введите progress , он отобразит прогресс выполнения команды cp и других команд например:

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

Если вы не установили progress , вы можете установить его из репозитория, например в CentOS с помощью этой команды: yum -y install progress .

Затем, после запуска команды cp в фоновом режиме или после обычного выполнения cp , откройте другой терминал, поэтому просто попробуйте эту команду:

# progress -m

См. Вывод:

[30904] cp /home/user/file.mp4
        2.3% (200.9 MiB / 8.4 GiB) 3.6 MiB/s remaining 0:38:58

Метод № 2: (используйте патч cp )

Или загрузите GNU coreutils и исправьте его.

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

Выполнить:

export FORCE_UNSAFE_CONFIGURE=1
./configure
make

Скопируйте два файла cp и mv , расположенные в coreutils-8.21 / src / , в / usr / local / bin :

cp src/cp /usr/local/bin/cp
cp src/mv /usr/local/bin/mv

Или скопируйте его с помощью файлового менеджера от имени пользователя root

Добавьте следующие строки в свой ~ / .bashrc :

alias cp='cp -gR'
alias mv='mv -g'

Выйти и войти в систему

Индикатор выполнения может отображаться без –g или –progress-bar , как рекомендовано Автором

См. вывод:

0 files copied so far...                                              194.4 MiB /   8.4 GiB
[||--------------------------------------------------------------------------------]  2.3 %
Copying at   3.3 MiB/s (about 0h 5m 47s remaining)
/home/user/file.mp4                                                   194.4 MiB / 446.1 MiB
[||||||||||||||||||||||||||||||||||||----------------------------------------------] 43.6 %

Источник: linuxhelp

27
27.01.2020, 19:27

dd status=progress

Опция, добавленная в GNU Coreutils 8.24+ (Ubuntu 16.04):

dd if=src of=dst status=progress

Stdout - это периодически обновляемая строка типа:

462858752 bytes (463 MB, 441 MiB) copied, 38 s, 12,2 MB/s

См. также: Как следить за ходом выполнения dd? | Ask Ubuntu

5
27.01.2020, 19:27

VCP – copy files in a curses interface (Show the Progress Bar in Linux).

DESCRIPTION: vcp copies files and directories in a curses interface, with text only output available.  its options and output are similar to BSD's cp while adding some new features.

It provides information on:

  • files copied and left to copy
  • data written and total data size
  • data being written every second
  • two status bars, one showing current file status, the other total status (except with 1 file, both show current), and percentage

when output is sent to the console:

  • a status bar
  • size copied and speed

Справочная страница VCP:https://linux.die.net/man/1/vcp

Скачать vcp -2.2.tar.gz из:

http://distfiles.gentoo.org/distfiles/vcp-2.2.tar.gz

Зависимость :curses.h (libncurses -dev ).

В Ubuntu установите:

sudo apt-get install libncurses-dev

или

sudo apt-get install libncurses5-dev

УСТАНОВИТЬ vcp:

make && make install

Вручную:

man vcp
1
27.01.2020, 19:27

В BSD cp, если вы используете ctrl + t , вы получите обновление в процентах, если вы должны использоватьcp

0
07.08.2020, 03:38

На определенных устройствах, таких как VMWare ESXi, где вы либо не контролируете то, что установлено, либо не имеете прав на установку, вы можете увидеть процент на файл и скорость, используя scp на локальном хосте вместо обычногоcp:

scp -rv item-to-copy your-user@127.0.0.1:/path/to/destination

scp on ESX

0
08.10.2021, 14:54

Теги

Похожие вопросы