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

У меня возникают проблемы при копировании больших файлов с помощью nautilus (он застревает). Мне нужно скопировать, используя cp . Я хотел бы знать, есть ли какие-либо параметры, показывающие% скопированные, а также скорость передачи.

cp
191 голос | спросил yzT 17 FebruaryEurope/MoscowbSun, 17 Feb 2013 17:23:35 +0400000000pmSun, 17 Feb 2013 17:23:35 +040013 2013, 17:23:35

15 ответов


141

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

  rsync --info = progress2 source dest
 
ответил yzT 18 FebruaryEurope/MoscowbMon, 18 Feb 2013 23:56:16 +0400000000pmMon, 18 Feb 2013 23:56:16 +040013 2013, 23:56:16
92

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

  pv inputfile> выходной файл
 

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

  tar c sourceDirectory | pv | tar x -C destinationDirectory
 

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

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

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

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

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

  cpstat sourceDirectory destinationDirectory
 

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

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

  rsync --progress -a sourceDirectory destinationDirectory
 
ответил Marco 17 FebruaryEurope/MoscowbSun, 17 Feb 2013 18:13:42 +0400000000pmSun, 17 Feb 2013 18:13:42 +040013 2013, 18:13:42
48

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

Пример:

  rsync -avh --progress sourceDirectory destinationDirectory
 
ответил JustStoppingThrough 2 Jam1000000amThu, 02 Jan 2014 09:55:57 +040014 2014, 09:55:57
21

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

  

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

Я использую его в течение последних нескольких месяцев, и он прочен.

ответил Amr Mostafa 21 52014vEurope/Moscow11bEurope/MoscowFri, 21 Nov 2014 13:25:33 +0300 2014, 13:25:33
13

Отметив, что это сообщение было несколько старым. Но когда я решил решить проблему, я подумал, что отправлю решение.

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

Откройте другое окно терминала или переместите процесс в фоновый код (Ctrl + Z, bg <CR>) , затем дайте индикатору прогресса путь гетто:

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

du -sh /path /sourcedirectory /

Преобразуйте результат в гигабайт (G), затем замените n на результат, полученный в переменной sourcesize. После того, как вы вставили sourcesize и 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; эхо% завершено; сон 10; сделанный
 

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

  0.100% завершено
0.200% завершено
Завершено 0.300%
... и т.д
 

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

ответил NordicViking 7 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowSun, 07 Sep 2014 13:10:41 +0400 2014, 13:10:41
6

Чтобы улучшить ответ Марко, сегодня я написал эту версию 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 -)

;}
 
ответил poe84it 2 PMpThu, 02 Apr 2015 18:01:00 +030001Thursday 2015, 18:01:00
5

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

Вы можете фон cp и список размером в ожидании cp , чтобы закончить.

Я использую этот perl для отслеживания роста одного файла, но он запускается извне в cp (или что-то еще иначе я это делаю)

ответил Matt 17 FebruaryEurope/MoscowbSun, 17 Feb 2013 17:46:13 +0400000000pmSun, 17 Feb 2013 17:46:13 +040013 2013, 17:46:13
5
  

Можно ли просмотреть скорость cp и процент скопированных?

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

1) Откройте новый терминал и введите 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

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

  cd /tmp
wget http://ftp.gnu.org/gnu/coreutils/coreutils-8.21.tar.xz
tar -xvJf coreutils-8.21.tar.xz
wget https://raw.githubusercontent.com/atdt/advcpmv/master/advcpmv-0.5-8.21.patch
patch -p1 -i advcpmv-0.5-8.21.patch
 

Run:

  export FORCE_UNSAFE_CONFIGURE = 1
./configure
делать
 

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

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

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

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

  псевдоним cp = 'cp -gR'
alias mv = 'mv -g'
 

Выход и вход

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

Источник: linuxhelp

ответил GAD3R 4 PM00000070000001531 2016, 19:18:15
4

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

  sudo watch lsof -p`pgrep -x cp`
 

из комментария Майка по вопросу как проверить ход выполнения cp

ответил techbio 24 Maypm16 2016, 23:50:54
3

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

https://github.com/Xfennec/cv

ответил saidi 5 PMpSun, 05 Apr 2015 15:53:31 +030053Sunday 2015, 15:53:31
3

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

watch -n 10 -differences du -sk --apparent-size <WATCHED_FOLDER>

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

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

ответил Timothy C. Quinn 23 FebruaryEurope/MoscowbTue, 23 Feb 2016 20:32:35 +0300000000pmTue, 23 Feb 2016 20:32:35 +030016 2016, 20:32:35
3

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

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

ответил jseals 4 PM00000050000005031 2016, 17:32:50
3

Даже если rsync даст вам некоторую статистику прогресса, если вы хотите индикатор выполнения, вы должны использовать pv .

Вы можете использовать cpv , оболочку для pv с более легким синтаксисом, более похожим на cp , который можно использовать для рекурсивного копировать каталоги

 введите описание изображения здесь>> </a> </p>

<p> Вы можете получить его <a href= здесь

ответил nachoparker 14 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 14 Sep 2017 10:40:12 +0300 2017, 10:40:12
3

dd status = progress

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

  dd if = src of = dst status = progress
 

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

  462858752 байт (463 МБ, 441 MiB) скопировано, 38 с, 12,2 МБ /с
 

Смотрите также: Как вы отслеживаете ход работы dd? | Спросите Ubuntu

ответил Ciro Santilli 新疆改造中心 六四事件 法轮功 15 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 15 Sep 2016 00:00:04 +0300 2016, 00:00:04
2

У меня просто был случай, когда cp был более или менее заблокирован из-за ошибки FUSE в принимающей файловой системе.

Если вы не можете просто переключиться с cp (т. е. потому что --sparse = always) и хотите что-то действительно надежное для прогресса, перейдите через /proc.

  Каждый 2.0s: cat /proc /20977 /io Чт 28 сен 04:08:57 2017

rchar: 268573800
wchar: 268500992
syscr: 4112
syscw: 4097
read_bytes: 268697600
write_bytes: 0
Отменено: 0
 
ответил Florian Heigl 28 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 28 Sep 2017 05:10:04 +0300 2017, 05:10:04

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132