В противном случае, существует ли какая-либо альтернативная утилита командной строки, которая может достичь этого?
Пока 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
чтобы узнать об этом больше.
Другой вариант, как В предлагает в этот ответ, заключается в использовании 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”), чтобы знать, что он действительно растет и копия работает.