Linux скорость копирования файла

🐧 Альтернативы команды cp на Linux для демонстрации прогресса и скорости

Вы когда-нибудь хотели увидеть скорость и прогресс при копировании файлов с помощью командной строки?

Для копирования файлов, папок и других данных вы, вероятно, использовали бы команду ditto или «cp», если вы знакомы с командной строкой операционных систем Linux или Unix.

Хотя команды ditto и «cp» полезны, иногда использование простой команды «cp» может занять много времени и утомить.

Параметр «-v» (подробный) в команде «cp» может предоставить вам дополнительную информацию о процессе копирования.

Однако недостатком является то, что эта команда не включает индикатор хода процесса копирования.

В Linux есть другие альтернативные команды, которые могут копировать файлы и папки, показывая ход и скорость процесса копирования. Ниже приведены альтернативные команды:

«Rsync» – одна из лучших команд, которая помогает копировать файлы через терминал.

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

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

Команда «rsync» имеет следующий синтаксис:

$ rsync options Source Destination

Использование опции «-av» с «rsync» – самая простая форма этой команды.

Как показано ниже, данная команда скопирует все файлы, находящиеся в «testfolder», в целевую папку с именем «Downloads»:

$ rsync -av testfolder/ Downloads/

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

«–progress» – это флаг, используемый в команде «rsync» для получения общего прогресса скопированного содержимого.

$ rsync -av --progress testfolder/ Downloads/

Еще один флаг, который можно включить в команду «rsync», – «–stats».

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

$ rsync -av --progress --stats testfolder/ Downloads/

2. Команда pv

Вы можете использовать команду «pv» для копирования одного файла, поскольку она предоставляет статистику, относящуюся к прогрессу и скорости.

В следующем случае «pv» выведет «входной файл» в «stdout», который затем перенаправляется в «выходной файл» с помощью оператора «>».

Когда вы это сделаете, он одновременно выведет всю информацию о скорости и прогрессе на терминал.

Файл, скопированный таким образом, будет иметь такие же права, как если бы вы его создали.

3. Команда tar

Если вы хотите скопировать несколько файлов или каталогов, то лучше использовать команду tar в терминале.

Укажите исходную и целевую папки в команде «tar» с параметром «-C» в сочетании с «pv», чтобы просмотреть скорость и ход процесса.

$ tar c testfolder | pv | tar x -C Downloads

4. Команда dd

В терминале команда «dd» используется для копирования или конвертации файлов.

Читайте также:  Dual boot linux with uefi

Это свободно доступный инструмент командной строки с открытым исходным кодом.

В приведенной ниже команде мы покажем вам, как использовать команду «dd» для получения статистики копирования файла:

Определите исходную папку в «if» и целевую папку в «of» и установите «progress» в качестве параметра статуса.

$ sudo dd if=inputfile of=/Downloads status=progress

Заключение

В Linux существует несколько альтернатив команде cp для отображения скорости и прогресса процесса копирования файлов или папок.

В этой статье обсуждались команды rsync, pv, tar и dd, которые копируют статистику данных при передаче больших файлов.

Источник

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

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

Midnight Commander также хорошо работает, и имеет симпатичный текстовый интерфейс с индикаторами выполнения, но может быть не установлен. Попробуйте mc в командной строке. Кроме того, очевидно, это не так cp .

Использование rsync с —progress только что заставило меня понять, что происходит. Он застревает, когда достигает 100%, а затем длится пару минут в итоге. Я думаю, что то же самое, что происходит с наутилусом. В любом случае, это уже другой вопрос, поэтому лучший ответ на этот вопрос — rsync —progress он показывает размер,%, скорость и прошедшее время.

одна проблема с rsync заключается в том, что он работает медленнее, чем чистая копия. На моем большом сервере разница составляет 60 МБ / с и 300 МБ / с соответственно.

@pdwalker даже с -W опцией? на всех моих хостах rsync почти так же быстро, как cp . так близко, что я регулярно использую rsync вместо cp .

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

rsync --info=progress2 source dest 

—info = progress2 все еще не превратил его в репозиторий по умолчанию, и вот он 2015 год. Похоже, хорошая идея.

—info=progress2 наконец включен version 3.1.0 protocol version 31 . Может быть, вы могли бы отредактировать свой ответ, YZT.

Я заметил, —info=progress2 что rsync пылает быстро! 200 МБ / с, в то время как Windows идет не дальше 90 МБ / с!

@ReneFroger, хотя это может быть реальная скорость (в зависимости от устройства), часто в Linux эта быстрая скорость действительно ложна, и после завершения копирования система все еще выполняет запись на устройство, в отличие от Windows, в которой вы можете извлечь устройство почти сразу же. Если вы копируете большие файлы, вы можете заметить, как он запускается с такой высокой скоростью, но затем он падает до стандартного.

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

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

tar c sourceDirectory | pv | tar x -C destinationDirectory 

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

Читайте также:  Linux mint mate автозагрузка

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

cpstat sourceDirectory destinationDirectory 

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

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

rsync --progress -a sourceDirectory destinationDirectory 

Это даст вам скорость передачи, но не ETA, потому pv что не знает, сколько данных поступит через канал. Вы можете указать это, используя -s . Например , сначала сделать , du -sh sourceDirectory чтобы получить (грубый) идею, а затем передать его pv , как это: pv -s 100m .

vbuf (Debian, Ubuntu) работает немного быстрее, чем pv , вероятно, из-за своего виртуального кольцевого буфера

@ Скаперен, я не знаю vbuf . Но, как кажется, в настоящий момент он нестабилен в Debian и поэтому часто недоступен на серверах, на которых обычно работает стабильная версия Debian.

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

rsync -avh --progress sourceDirectory destinationDirectory 

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

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

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

кажется, не работает со всеми файловыми системами (например, cifs), но +1, не знал таких сумасшедших выходов

Обратите внимание, что этот проект теперь называется «progress — Coreutils Progress Viewer (ранее известный как cv)».

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

Да, можно отображать ход выполнения команды 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 обычного запуска , откройте другой терминал, поэтому просто попробуйте эту команду:

Смотрите вывод:

[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 loacated под coreutils-8.21/src/ к /usr/local/bin :

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

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

Читайте также:  Device is write protected linux

Добавьте следующие строки в ваш ~/.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 % 

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

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

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

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

du -sh /path/sourcedirectory/

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

while true; do sourcesize=n destdir=/path/destinationdirectory/ copyprogress="$(export | du -sh $destdir | awk '' | 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. В единицу времени скорость должна быть тривиальной для расчета и отображения.

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

Это замечательно, особенно в тех случаях, в которых я сейчас нахожусь: удаленно запустил огромное mv-задание для перемещения террабайтов резервных копий из одного пула хранения в другой, не задумываясь заранее о последствиях. Теперь я могу легко справиться с процессом и посмотреть на него. Потрясающие!

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

function cpstat () < tar -cf - "$" | pv -s "$( du -cs -BK --apparent-size "$" | tail -n 1 | cut -d "$(echo -e "\t")" -f 1)" | ( cd "$"; tar -xf - ) ;> 

Источник

Оцените статью
Adblock
detector