При перемещении больших каталогов с помощью mv
, есть ли способ просмотреть прогресс (%)? У cp
команды на gentoo есть -g
переключатель, который показывает прогресс.
command-line
mv
progress-information
letronje
источник
источник
Ответы:
Вы можете создать пропатченные cp и mv, которые затем поддерживают параметр -g, чтобы показать прогресс. На этой странице есть инструкции и патчи . Тем не менее : страница предлагает вам сделать
который перезаписывает оригинальный cp и mv. Это имеет два недостатка: во-первых, если в вашу систему прибывает обновленный пакет coreutils, он перезаписывается. Во-вторых, если у исправленной версии есть проблема, они могут сломать сценарии, полагаясь на стандартные cp и mv. Я бы предпочел сделать что-то вроде этого:
который копирует файлы в / usr / local / bin, который предназначен для программ, скомпилированных пользователем, и дает им другое имя. Поэтому, когда вы хотите индикатор выполнения, вы говорите
mvg -g bigfile /mnt/backup
и используете mv как обычно.Также вы можете сделать
alias mvg="/usr/local/mvg -g"
то, что вам нужно только сказатьmvg bigfile /mnt/backup
и сразу получить индикатор выполнения.источник
Мне не нравится идея перезаписывать двоичные файлы из coreutil, когда есть более простые решения, так что вот мое:
rsync : Rsync копирует файлы и имеет
-P
переключатель для индикатора выполнения. Так что, если у вас установлен rsync, вы можете использовать простой псевдоним в своем файле точек оболочки:Недостатком является то, что rsync немного медленнее, чем cp, но вы должны измерить это со временем и решить для себя, я могу с этим смириться :-)
Сценарий оболочки: Сценарий оболочки также может создавать индикатор выполнения. Я нашел это некоторое время назад в сети, и я не помню источник:
Это будет выглядеть так:
бар :
bar
небольшой сценарий оболочки для отображения панели процессов для всех видов операций (cp, tar и т. д.) Вы можете найти примеры на домашней странице проекта.Он также написан для оболочки Bourne, поэтому он будет работать повсюду.
источник
bar
еще не завернутmv
.rsync
это не полностью заменяетmv
(о чем спрашивает OP), особенно когда речь идет о быстрых копиях в таких файловых системах, как копирование при записиbtrfs
.Существует новый инструмент под названием,
progress
который может найти любой дескриптор, связанный с запущенной командой и показать прогресс и скорость: доступный здесьвыводит статистику для всех запущенных операций cp, mv и т. д.
источник
progress
после установки, и он представил мне прогресс дляmv
команды, которую я ждал в настоящее время. Спасибо!sudo
(тот же пользователь, я думаю) - вы также можете использовать,watch
чтобы сказать, что происходит каждые 2 секунды:watch progress -w
watch progress -w
вас также можно просто использоватьprogress -m
Вы можете использовать команду просмотра канала,
pv
чтобы показать индикатор выполнения:Я часто использую это для копирования большого файла через смонтированную сетевую файловую систему (в сочетании с
gzip
иtar
). Недостатком является то, что вы можете скопировать только один файл, а не каталог. И вы должны дать новому файлу имя, вы не можете просто дать каталог назначения, как этоcp
делает. Однако копирование не являетсяpv
целью. Это мощный инструмент, который делает гораздо больше, чем просто копирует файл. Смотрите домашнюю страницу для большего количества примеровpv
.Гораздо лучший вариант - использовать
rsync -aP
. Если вы хотитеmv
вместо этого, добавьте флаг--remove-source-files
. Добавьте это к вашему,.bashrc
если вы хотите часто использовать команды:Недостатком является то, что rsync показывает только прогресс, а не индикатор выполнения.
источник
tar cf - source-dir | pv | tar xf - -C out-dir
даст вам пропускную способность всего каталога. Если вы знаете размер и перейдете-s
в pv, то это также даст вам прогресс.Если ваша цель - переместить / скопировать каталог с индикатором выполнения, но избегая нетерминального графического интерфейса пользователя, mc (Midnight Commander) является хорошим выбором.
источник
Мое решение заключается в использовании
rsync
. Он может копировать каталоги, удалять исходные файлы после успешного копирования (таким образом, «перемещая» их) и отображать отчеты о ходе выполнения, среди многих других функций (в частности, синхронизация частично скопированных каталогов и работа по сети).Вот как я мог бы переместить каталог с помощью rsync с отчетом о ходе работы:
Убедитесь , что
$src
ничего не заканчивается обратной косой чертой, в противном случае вы получите другое значение , чем в GNUcp
.В
rm -r
конце необходимо, потому что--remove-source-files
только удаляет исходные файлы, после того, как каждый успешно скопирован, а не каталоги. Он&&
обязательно запускает его, только если rsync завершается успешно. Если вы параноик, вы можете заменить его с каким - рекурсивнымrmdir
, такими какfind $src -d -exec rmdir {} +
Единственный сбой в том, что
-P
опция показывает прогресс для каждого файла, а не для всей операции копирования. Это может быть бесполезно, если вы пытаетесь переместить каталог со множеством крошечных файлов. Последняя версия rsync для разработки имеет альтернативный флаг,--info=progress2
который показывает ход выполнения всей операции.источник
Чтобы избежать исправлений в coreutil для добавления индикатора прогресса
mv
иcp
,gcp
(Goffi's CoPier) - это новая альтернатива: http://wiki.goffi.org/wiki/Gcp/enИспользовать так же, как
cp
с опциями-r
для рекурсивности и-v
многословия.Он использует файловую очередь, когда несколько команд вызываются одновременно. Он также позволяет записывать скопированные имена файлов в журнал, см. Подробности в разделе справочной страницы Сохранение исходного кода .
Вот хорошее руководство, с которого можно начать
gcp
: http://mylinuxbook.com/gcp-advanced-command-line-file-copier-inspired-by-cp/источник
Прежде всего: я никогда не копирую большие файлы без использования ionice, если не знаю, что не захочу использовать компьютер полчаса или больше.
Второе: все мои разделы разделены, поэтому копирование внутри раздела не занимает много времени. Если это длинная копия, я делаю
du -sm
на файлы иdf -m | grep copy_to_partition
. Затем, если мне интересно, сколько еще времени потребуется, я делаю ещеdf
раз и вижу, сколько файлов было скопировано.источник
На моем Mint мне нравится использовать gcp для этого или curl-решения (что действительно приятно)
Возможно, вам придется установить его
sudo apt-get install gcp
И очень хорошая и отличная задача для индикатора выполнения с информацией о
в хорошем читаемом формате это:
Кроме того, вам может понадобиться сначала установить его
sudo apt-get install curl
источник
gcp
не поддерживает перемещение файла, т.е. исходные файлы должны быть удалены вручную после успешного копирования.Это не даст вам индикатор выполнения, но нажмите,
CTRL-T
и вы отправитеSIGINFO
сообщениеmv
, которое сообщит, над каким файлом он работает и как далеко продвинулся процесс. Довольно удобно иметь это для передачи больших файлов, возможно, не так полезно для передачи со многими маленькими файлами.Быстрый пример:
источник
INFO: unknown signal; killall -l lists signals.
думаю, что SIGINFO есть только на некоторых BSD, а не в стандартном POSIX.Используется
mv -v
для печати одной строки на перемещенный файл иpv -l
для печати прогресса на основе количества строк (в действительности это количество файлов).Вам понадобится
pv
(просмотрщик каналов): http://www.ivarch.com/programs/pv.shtmlИспользуйте следующую команду, чтобы получить количество файлов:
Эта команда покажет информацию о ходе выполнения в зависимости от количества скопированных файлов. Это работает лучше всего, если есть много маленьких файлов. Если есть только несколько файлов, которые огромны, то у вас не будет большого удовольствия.
Обратите внимание, что
mv
на том же разделе должно быть быстро.mv
в другой раздел будет таким же, какcp source target
следуетrm source
. Итак, вот две команды для копирования каталогов с информацией о прогрессе.сообщить о прогрессе на основе количества скопированных файлов:
сообщить о прогрессе на основе скопированных байтов:
Смотрите здесь для более подробной информации: информация о прогрессе через pv для копирования каталога
источник
Неизменно я в конечном итоге ищу этот ответ после того, как я запускаю команду «mv», и в этот момент я не хочу запускать его снова. Если вы находитесь в этой ситуации, очень простой способ отслеживать прогресс (или посмотреть, достаточно ли он далеко, чтобы его не стоило убивать) - запустить:
Это просто напечатает размер каталога, чтобы вы могли увидеть, сколько данных было скопировано, или вы можете запустить его пару раз, чтобы увидеть, как быстро передаются данные.
источник