Как показать ход передачи и скорость при копировании файлов с помощью cp?

Вы, наверное, догадались, что вам нужен файл /usr/lib/i386-linux-gnu/pkcs11/gnome-keyring-pkcs11.so. Этот файл является частью пакета i386 ubuntu, который не будет установлен непосредственно в вашей системе amd64. Но вы можете легко получить это:

cd $(mktemp -d)                      ## create and go to a temporary temp dir
apt-get download gnome-keyring:i386  ## download the i386 version of gnome-keyring
ar x gnome-keyring*.deb              ## Uncompress the package
tar xf data.tar.gz
## Finally move the file you need to the desired location:
sudo mv usr/lib/i386-linux-gnu/pkcs11 /usr/lib/i386-linux-gnu/

Это случилось со мной на 12.10 с wine-1.5.29, а версия i386 gnome-keyring была помечена как 3.6.1-0ubuntu1_i386, и это сработало для меня.

Обратите внимание, что если эта инструкция вам не подходит, возможно, вам стоит упомянуть ваш выпуск ubuntu и версию gnome-keyring. Спасибо!

1
задан 16 March 2018 в 01:45

19 ответов

Нет. Посмотрите здесь, почему. Хотя он делает больше, чем вам нужно, rsync имеет один параметр --progress.

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)
116
ответ дан 25 May 2018 в 23:58
  • 1
    Это отлично работает в текущем Ubuntu (14.10). Он также поддерживает флаг -r для рекурсии каталогов. Он может быть даже псевдонимом как прямая замена для cp: alias cp="rsync -ah --progress" – rustyx 24 December 2014 в 01:04
  • 2
    Работы набухают на OS X с бонусом к возможности использования инструментов, входящих в систему. – Ivan X 24 April 2015 в 23:11
  • 3
    это здорово, результат выглядит как filename MB-copied MB-speed time-remaining) – Rudolf Olah 21 May 2017 в 18:20
  • 4
    Мне нравится эта альтернатива лучше, чем pv, особенно потому, что rsync является частью стандартной установки – Joao Costa 17 September 2017 в 21:31
  • 5
    @bartekbrak благодарит за обмен. В настоящее время я использую macOS 10.12.x, работающий на домашней версии rsync 3.1.2, и использование --progress заставляет мою голову вращаться – Chris 1 March 2018 в 23:53

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

индикация перехода к передаче непрерывного копирования при ошибке (переход к следующему файлу) запись состояния копирования: gcp регистрирует все свои действия, чтобы можно было знать, какие файлы были успешно скопированы с именем mangling для обработки ограничений целевой файловой системы (например, удаление несовместимых символов «*» или «?» на FAT)

Однако, даже если индикатор выполнения достиг 100%, когда Используя этот инструмент, вы должны дождаться появления подсказки терминала перед безопасным удалением носителя, чтобы вы могли убедиться, что процесс передачи успешно завершен.

gcp используется для копирования файлов и имеет такие параметры, как --preserve, чтобы можно было сохранить различные атрибуты и разрешения и --recursive, чтобы можно было скопировать целые каталоги. Более подробную информацию о его параметрах можно найти, введя man gcp или перейдя в wiki notes .

Установите gcp из репозиториев с

sudo apt-get install gcp

(Примечание: в Ubuntu 12.10 новая точка автомата - это, например, [[ f13])

Вы можете скопировать файл на свой носитель, введя

gcp /home/mike/file.mp4 /media/usb

и скопировав папку на ваш носитель с помощью

gcp -rv ~/Podcasts /media/Mik2

Пример вывода из gcp с индикатором выполнения:

gcp ~/Videos_incIplayer/mars.flv /media/Mik2
Copying 168.57 MiB 100% |########################################################|   7.98 M/s Time: 00:00:22

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

83
ответ дан 25 May 2018 в 23:58
  • 1
    Получил ошибку с ним по ssh dbus.exceptions.DBusException: org.freedesktop.DBus.Error.NotSupported: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11 – msa7 18 January 2016 в 03:29
  • 2
    если на дисплее открыто окно X11, вы можете просто установить export DISPLAY=:0.0 перед запуском gcp. Если машина безголовна, вам нужно будет запустить xsession в виртуальный фреймбуфер или что-то еще, в этот момент вам, вероятно, стоит просто искать другую программу – user292067 9 October 2016 в 20:33
  • 3
    gcp довольно приличный, но требование DBUS / X является нечетным. Я обработал это через SSH, используя ssh forwarding: ssh -X user@host, и это позволило мне запустить его. – Oli♦ 21 October 2016 в 15:24

Я получаю удовольствие от использования cURL для этой конкретной цели. Страница руководства перечисляет протокол «ФАЙЛ» как поддерживаемый, поэтому просто используйте его, как и любой другой протокол в URL-адресе:

curl -o destination FILE://source

Скорость, прогресс, оставшееся время и т. Д. - все в знакомом формате .

53
ответ дан 25 May 2018 в 23:58
  • 1
    Это замечательно, особенно в средах, где вам запрещено устанавливать новые инструменты и где rsync недоступен. – user 5 September 2013 в 12:00
  • 2
    Это замечательно, особенно в средах, где вам запрещено устанавливать новые инструменты и где rsync недоступен. – user 5 September 2013 в 12:00
  • 3
    Это замечательно, особенно в средах, где вам запрещено устанавливать новые инструменты и где rsync недоступен. – user 5 September 2013 в 12:00
  • 4
    Это замечательно, особенно в средах, где вам запрещено устанавливать новые инструменты и где rsync недоступен. – user 5 September 2013 в 12:00
  • 5
    Это замечательно, особенно в средах, где вам запрещено устанавливать новые инструменты и где rsync недоступен. – user 5 September 2013 в 12:00
  • 6
    Это замечательно, особенно в средах, где вам запрещено устанавливать новые инструменты и где rsync недоступен. – user 5 September 2013 в 12:00
  • 7
    Блестящий, это должен быть известный хак! – ionreflex 20 October 2015 в 21:13
  • 8
    Хороший ответ! Умная! – phatty 11 January 2018 в 00:48

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

cp -rv old-directory new-directory
21
ответ дан 25 May 2018 в 23:58
  • 1
    Информация о прогрессе? Это просто подробный вывод. Чтобы предоставить информацию о ходе работы, вам, по крайней мере, нужно будет теперь, сколько файлов или даже файлов необходимо скопировать. – Julian F. Weinert 3 July 2015 в 23:21

Ядро знает большую часть данных, таких как скорость, а часто и процент. Современные ядра выставляют это через свою файловую систему / proc.

showpeed из https://github.com/jnweiger/showspeed использует эту информацию. Он может подключаться к уже запущенным программам и периодически предоставлять такие обновления:

$ dd if=bigfile of=/tmp/otherbigfile &
$ showspeed dd
dd looks like a process name. pid=4417 matches av0=dd.
p/4417/fd/0r /home/jw/bigfile 113MB/s (12%, 2.3GB)  9m:35
p/4417/fd/1w /tmp/otherbigfile 182MB/s (2.6GB)
p/4417/fd/0r /home/jw/bigfile 285MB/s (15%, 3.0GB)  8m:08
p/4417/fd/0r /home/jw/bigfile 115MB/s (16%, 3.2GB)  8m:01
p/4417/fd/0r /home/jw/bigfile 107MB/s (17%, 3.4GB)  7m:39
p/4417/fd/1w /tmp/otherbigfile 104MB/s (3.5GB)
p/4417/fd/0r /home/jw/bigfile 139MB/s (19%, 3.7GB)  7m:37
p/4417/fd/0r /home/jw/bigfile 116MB/s (20%, 3.9GB)  7m:18
p/4417/fd/1w /tmp/otherbigfile  67MB/s (4.0GB)
p/4417/fd/1w /tmp/otherbigfile 100MB/s (4.1GB)
...
17
ответ дан 25 May 2018 в 23:58
  • 1
    Хороший. Как это работает, проценты? Думаю, только в том случае, если файл открыт только как прочитанный? И это, вероятно, не будет работать в случае разброса доступа. – j_kubik 22 December 2014 в 21:29
  • 2
    В этом случае вы также можете использовать другой терминал для запуска pkill -USR1 dd, чтобы dd отображал его статус, другой вариант был бы watch -n 1 pkill -USR1 dd, чтобы периодически показывать его ход (каждую секунду). – Yaron 16 March 2015 в 13:23
  • 3
    Правильно. Многие инструменты получили встроенный способ сообщать статистику с течением времени. dd не является исключением. Современные реализации имеют параметр status = progess. Showspeed - это классический стиль Unix «один инструмент для одной цели». решение - точно так же, как pv. Но у него разные операции: подумайте о том, как чашки накачивают файл через ghostscript или вы хотите знать ETA для текущего cp или tar. Это может быть выполнено на 95% уже через несколько часов, и вы, вероятно, не хотите перезапускать это только для добавления pv ... Рассеянный доступ не будет работать хорошо. Шосспид только образцы ищут позиции. – Jürgen Weigert 30 April 2018 в 22:22

Хотя 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
11
ответ дан 25 May 2018 в 23:58

Появился новый инструмент cv, который может найти любой дескриптор, связанный с текущей командой, и показать прогресс и скорость: https://github.com/Xfennec/cv

cv -w

выводит статистику для все выполняемые операции cp, mv и т. д.

9
ответ дан 25 May 2018 в 23:58
  • 1
    watch cv -q еще опережает – nwgat 19 January 2015 в 04:42
  • 2
    Он показывает только прогресс для отдельных файлов, он осознает, что cp копирует каталог рекурсивно или нет. – Flimm 31 March 2016 в 12:27
  • 3
    Война переименована в прогресс. Отличный инструмент! – sebastian 25 June 2016 в 17:42

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

Установите его с помощью команды

sudo apt-get install progress
[d2 ] Этот инструмент можно использовать следующим образом:

cp bigfile newfile & progress -mp $!

Выход:

[11471] cp /media/Backup/Downloads/FILENAME.file 
        29.9% (24.2 MiB / 16 MiB)
9
ответ дан 25 May 2018 в 23:58

Как многие говорили, cp не включает эту функциональность.

Просто чтобы бросить мои $ 0,02, что я обычно делаю с тривиальными ситуациями копирования (т. е. no -R):

Посмотрите, насколько велик файл и помните. Начать копирование. Откройте другой терминал. Запустите watch ls -lh DIR в каталоге, где цель

. Это может помочь мне обновить размер целевого файла с минимальными трудностями. [!d11 ]

В качестве альтернативы для менее тривиальных ситуаций, например рекурсивно копируя каталоги, вы можете использовать watch du -hs DIR, чтобы просмотреть сводку размера DIR. Однако du может занять много времени и может даже замедлить копирование, поэтому вы можете использовать аргумент -n INTERVAL для просмотра, чтобы компромисс был приемлемым.

Обновление: если вы используете wild- карты с командой, используемой с watch du, например watch du -hs backup/*, не забудьте указать:

watch "du -hs backup/*"

, иначе wild-cards будут разворачиваться только один раз, когда часы будут запущены, поэтому du не будет смотреть на новые файлы / подкаталоги. [!d15 ]

5
ответ дан 25 May 2018 в 23:58

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?

4
ответ дан 25 May 2018 в 23:58

Используйте сценарий оболочки:

#!/bin/sh
cp_p()
{
   strace -q -ewrite cp -- "${1}" "${2}" 2>&1 \
      | awk '{
        count += $NF
            if (count % 10 == 0) {
               percent = count / total_size * 100
               printf "%3d%% [", percent
               for (i=0;i<=percent;i++)
                  printf "="
               printf ">"
               for (i=percent;i<100;i++)
                  printf " "
               printf "]\r"
            }
         }
         END { print "" }' total_size=$(stat -c '%s' "${1}") count=0
}

Это будет выглядеть так:

% cp_p /home/echox/foo.dat /home/echox/bar.dat
66% [===============================>                      ]

Источник

2
ответ дан 25 May 2018 в 23:58

В зависимости от того, что вы хотите сделать, Midnight Commander (mc) может быть ответом. Я удивлен, что это еще не упоминалось.

Инструменты, такие как pv или rsync, хороши для отображения прогресса передачи одного огромного файла, но когда дело доходит до копирования целых каталогов / деревьев, [ f4] вычисляет размер, а затем показывает прогресс очень хорошо. Кроме того, он доступен из коробки на большинстве систем.

2
ответ дан 25 May 2018 в 23:58
  • 1
    "он доступен из коробки в большинстве систем. " ... не по умолчанию для установки Ubuntu по умолчанию. – muru 30 January 2016 в 21:58

Если у вас есть rsync 3.1 или выше (rsync --version), вы можете копировать (cp -Rpn), сохраняя разрешения и права собственности, каталоги recurse, «no clobber» и отображая общий прогресс (а не просто прогресс по файлу) , скорость копирования и (очень приблизительное) расчетное время, оставшееся с помощью:

sudo rsync -a --info=progress2 --no-i-r /source /destination

Обратите внимание, что sudo требуется только при работе с каталогами / файлами, которые у вас нет. Кроме того, без --no-i-r процент может сбрасываться на меньшее число в какой-то момент во время копирования. Возможно, более поздние версии rsync будут по умолчанию для no-i-r с информацией = progress2, но это не в текущей версии 3.1.2.

Я обнаружил, что процент и оставшееся время сильно переоцениваются при копировании в каталог, который уже содержит файлы (например, когда вы обычно используете cp -n «no clobber»). [!d2 ]

2
ответ дан 25 May 2018 в 23:58

Вы можете скопировать любую программу. В то же время вы можете запустить sudo iotop и видеть скорость чтения / записи на диске еще без прогресса.

0
ответ дан 25 May 2018 в 23:58

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

индикация перехода к передаче непрерывного копирования при ошибке (переход к следующему файлу) запись состояния копирования: gcp регистрирует все свои действия, чтобы можно было знать, какие файлы были успешно скопированы с именем mangling для обработки ограничений целевой файловой системы (например, удаление несовместимых символов «*» или «?» на FAT)

Однако, даже если индикатор выполнения достиг 100%, когда Используя этот инструмент, вы должны дождаться появления подсказки терминала перед безопасным удалением носителя, чтобы вы могли убедиться, что процесс передачи успешно завершен.

gcp используется для копирования файлов и имеет такие параметры, как --preserve, чтобы можно было сохранить различные атрибуты и разрешения и --recursive, чтобы можно было скопировать целые каталоги. Более подробную информацию о его параметрах можно найти, введя man gcp или перейдя в wiki notes .

Установите gcp из репозиториев с

sudo apt-get install gcp

(Примечание: в Ubuntu 12.10 новая точка автомата - это, например, [[ f13])

Вы можете скопировать файл на свой носитель, введя

gcp /home/mike/file.mp4 /media/usb

и скопировав папку на ваш носитель с помощью

gcp -rv ~/Podcasts /media/Mik2

Пример вывода из gcp с индикатором выполнения:

gcp ~/Videos_incIplayer/mars.flv /media/Mik2
Copying 168.57 MiB 100% |########################################################|   7.98 M/s Time: 00:00:22

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

83
ответ дан 25 May 2018 в 23:58

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

индикация перехода к передаче непрерывного копирования при ошибке (переход к следующему файлу) запись состояния копирования: gcp регистрирует все свои действия, чтобы можно было знать, какие файлы были успешно скопированы с именем mangling для обработки ограничений целевой файловой системы (например, удаление несовместимых символов «*» или «?» на FAT)

Однако, даже если индикатор выполнения достиг 100%, когда Используя этот инструмент, вы должны дождаться появления подсказки терминала перед безопасным удалением носителя, чтобы вы могли убедиться, что процесс передачи успешно завершен.

gcp используется для копирования файлов и имеет такие параметры, как --preserve, чтобы можно было сохранить различные атрибуты и разрешения и --recursive, чтобы можно было скопировать целые каталоги. Более подробную информацию о его параметрах можно найти, введя man gcp или перейдя в wiki notes .

Установите gcp из репозиториев с

sudo apt-get install gcp

(Примечание: в Ubuntu 12.10 новая точка автомата - это, например, [[ f13])

Вы можете скопировать файл на свой носитель, введя

gcp /home/mike/file.mp4 /media/usb

и скопировав папку на ваш носитель с помощью

gcp -rv ~/Podcasts /media/Mik2

Пример вывода из gcp с индикатором выполнения:

gcp ~/Videos_incIplayer/mars.flv /media/Mik2
Copying 168.57 MiB 100% |########################################################|   7.98 M/s Time: 00:00:22

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

83
ответ дан 25 May 2018 в 23:58

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

индикация перехода к передаче непрерывного копирования при ошибке (переход к следующему файлу) запись состояния копирования: gcp регистрирует все свои действия, чтобы можно было знать, какие файлы были успешно скопированы с именем mangling для обработки ограничений целевой файловой системы (например, удаление несовместимых символов «*» или «?» на FAT)

Однако, даже если индикатор выполнения достиг 100%, когда Используя этот инструмент, вы должны дождаться появления подсказки терминала перед безопасным удалением носителя, чтобы вы могли убедиться, что процесс передачи успешно завершен.

gcp используется для копирования файлов и имеет такие параметры, как --preserve, чтобы можно было сохранить различные атрибуты и разрешения и --recursive, чтобы можно было скопировать целые каталоги. Более подробную информацию о его параметрах можно найти, введя man gcp или перейдя в wiki notes .

Установите gcp из репозиториев с

sudo apt-get install gcp

(Примечание: в Ubuntu 12.10 новая точка автомата - это, например, [[ f13])

Вы можете скопировать файл на свой носитель, введя

gcp /home/mike/file.mp4 /media/usb

и скопировав папку на ваш носитель с помощью

gcp -rv ~/Podcasts /media/Mik2

Пример вывода из gcp с индикатором выполнения:

gcp ~/Videos_incIplayer/mars.flv /media/Mik2
Copying 168.57 MiB 100% |########################################################|   7.98 M/s Time: 00:00:22

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

83
ответ дан 25 May 2018 в 23:58

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

индикация перехода к передаче непрерывного копирования при ошибке (переход к следующему файлу) запись состояния копирования: gcp регистрирует все свои действия, чтобы можно было знать, какие файлы были успешно скопированы с именем mangling для обработки ограничений целевой файловой системы (например, удаление несовместимых символов «*» или «?» на FAT)

Однако, даже если индикатор выполнения достиг 100%, когда Используя этот инструмент, вы должны дождаться появления подсказки терминала перед безопасным удалением носителя, чтобы вы могли убедиться, что процесс передачи успешно завершен.

gcp используется для копирования файлов и имеет такие параметры, как --preserve, чтобы можно было сохранить различные атрибуты и разрешения и --recursive, чтобы можно было скопировать целые каталоги. Более подробную информацию о его параметрах можно найти, введя man gcp или перейдя в wiki notes .

Установите gcp из репозиториев с

sudo apt-get install gcp

(Примечание: в Ubuntu 12.10 новая точка автомата - это, например, [[ f13])

Вы можете скопировать файл на свой носитель, введя

gcp /home/mike/file.mp4 /media/usb

и скопировав папку на ваш носитель с помощью

gcp -rv ~/Podcasts /media/Mik2

Пример вывода из gcp с индикатором выполнения:

gcp ~/Videos_incIplayer/mars.flv /media/Mik2
Copying 168.57 MiB 100% |########################################################|   7.98 M/s Time: 00:00:22

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

83
ответ дан 25 May 2018 в 23:58

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

индикация перехода к передаче непрерывного копирования при ошибке (переход к следующему файлу) запись состояния копирования: gcp регистрирует все свои действия, чтобы можно было знать, какие файлы были успешно скопированы с именем mangling для обработки ограничений целевой файловой системы (например, удаление несовместимых символов «*» или «?» на FAT)

Однако, даже если индикатор выполнения достиг 100%, когда Используя этот инструмент, вы должны дождаться появления подсказки терминала перед безопасным удалением носителя, чтобы вы могли убедиться, что процесс передачи успешно завершен.

gcp используется для копирования файлов и имеет такие параметры, как --preserve, чтобы можно было сохранить различные атрибуты и разрешения и --recursive, чтобы можно было скопировать целые каталоги. Более подробную информацию о его параметрах можно найти, введя man gcp или перейдя в wiki notes .

Установите gcp из репозиториев с

sudo apt-get install gcp

(Примечание: в Ubuntu 12.10 новая точка автомата - это, например, [[ f13])

Вы можете скопировать файл на свой носитель, введя

gcp /home/mike/file.mp4 /media/usb

и скопировав папку на ваш носитель с помощью

gcp -rv ~/Podcasts /media/Mik2

Пример вывода из gcp с индикатором выполнения:

gcp ~/Videos_incIplayer/mars.flv /media/Mik2
Copying 168.57 MiB 100% |########################################################|   7.98 M/s Time: 00:00:22

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

83
ответ дан 25 May 2018 в 23:58

Другие вопросы по тегам:

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