Как сделать индикатор выполнения при копировании каталога с помощью cp? - PullRequest
44 голосов
/ 20 августа 2011

Полагаю, я мог бы сравнить количество файлов в исходном каталоге с количеством файлов в целевом каталоге по мере выполнения cp, или, возможно, вместо этого сделать это с размером папки? Я попытался найти примеры, но все индикаторы выполнения bash, похоже, написаны для копирования отдельных файлов. Я хочу скопировать кучу файлов (или каталог, если первое невозможно).

Ответы [ 10 ]

55 голосов
/ 12 августа 2013

Вы также можете использовать rsync вместо cp, например:

rsync -Pa source destination

Что даст вам индикатор выполнения и примерное время завершения. Очень удобно.

23 голосов
/ 26 ноября 2013

Чтобы показать индикатор выполнения при выполнении рекурсивной копии файлов, папок и подпапок (включая ссылки и атрибуты файлов), вы можете использовать gcp (легко устанавливается в Ubuntu и Debian с помощью команды "sudo apt-get install gcp"):

gcp -rf SRC DEST

Вот типичный вывод при копировании большой папки файлов:

Copying 1.33 GiB  73% |#####################      | 230.19 M/s ETA:  00:00:07

Обратите внимание, что для всей операции отображается только один индикатор выполнения, тогда как если вы хотитеодин индикатор выполнения для файла, вы можете использовать rsync:

rsync -ah --progress SRC DEST
7 голосов
/ 20 августа 2011

Вы можете взглянуть на инструмент vcp.Это простой инструмент копирования с двумя индикаторами выполнения: один для текущего файла и один для всего.

РЕДАКТИРОВАТЬ

Вот ссылка на источники: http://members.iinet.net.au/~lynx/vcp/ Справочную страницу можно найти здесь: http://linux.die.net/man/1/vcp

Большинство рассылокесть пакет для него.

4 голосов
/ 20 августа 2011

Вот еще одно решение: используйте инструмент bar

Вы можете вызвать его так:

#!/bin/bash
filesize=$(du -sb ${1} | awk '{ print $1 }')
tar -cf - -C ${1} ./ | bar --size ${filesize} | tar -xf - -C ${2}

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

2 голосов
/ 13 января 2014

A simple unix . Путь к каталогу назначения и сделать watch -n 5 du -s.Возможно, сделать его более красивым, показав в виде бара.Это может помочь в средах, где у вас есть только стандартные утилиты Unix и нет возможности устанавливать дополнительные файлы.Ду-ш это ключ, часы нужно делать каждые 5 секунд. Плюсы : Работает на любой Unix-системе Минусы : Нет индикатора выполнения

1 голос
/ 14 сентября 2017

Чтобы добавить другую опцию, вы можете использовать cpv.Он использует pv для имитации использования cp.

Он работает как pv, но вы можете использовать его для рекурсивного копирования каталогов

enter image description here

Вы можете получить его здесь

1 голос
/ 26 июня 2014

Мой предпочтительный вариант: Advanced Copy , поскольку он использует исходные cp исходные файлы.

$ wget http://ftp.gnu.org/gnu/coreutils/coreutils-8.21.tar.xz
$ tar xvJf coreutils-8.21.tar.xz
$ cd coreutils-8.21/
$ wget --no-check-certificate https://raw.githubusercontent.com/atdt/advcpmv/master/advcpmv-0.5-8.21.patch
$ patch -p1 -i advcpmv-0.5-8.21.patch
$ ./configure
$ make

Новые программы теперь находятся в src / cp иSRC / мв.Вы можете заменить существующие команды:

$ sudo cp src/cp /usr/local/bin/cp
$ sudo cp src/mv /usr/local/bin/mv
0 голосов
/ 11 сентября 2018

Проверьте исходный код для progress_bar в моем репозитории git ниже

https://github.com/Kiran-Bose/supreme

Также попробуйте пакет пользовательских сценариев bash supreme , чтобы проверить, как работает индикатор выполнения с cp и mv командами

Обзор функциональности

(1) Открытые приложения ----Fire Fox ----Калькулятор ---- Настройка

(2) Управление файлами ----Поиск ---- Navigate ---- Быстрый доступ

            |----Select File(s)
            |----Inverse Selection
            |----Make directory
            |----Make file
                                          |----Open
                                          |----Copy
                                          |----Move
                                          |----Delete
                                          |----Rename
                                          |----Send to Device
                                          |----Properties

(3) Управление телефоном ---- Переместить / Скопировать с телефона ---- Переместить / Скопировать на телефон ---- Синхронизация папок

(4) Управление USB ---- Переместить / Копировать с USB ---- Переместить / Копировать на USB

0 голосов
/ 28 февраля 2017

Как насчет чего-то вроде

find . -type f | pv -s $(find . -type f | wc -c) | xargs -i cp {} --parents /DEST/$(dirname {})

Он находит все файлы в текущем каталоге, передает данные через PV, давая PV оценочный размер, чтобы измеритель прогресса работал, а затем передает его команде CP с флагом --parents, чтобы путь DEST соответствовал пути SRC. .

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

find /home/user/test -type f | pv -s $(find . -type f | wc -c) | xargs -i cp {} --parents /www/test/$(dirname {})

путь назначения становится / www / test / home / user / test / .... FILES ... и я не уверен, как сказать команде избавиться от части '/ home / user / test'. Вот почему я должен запустить его из каталога SRC.

0 голосов
/ 21 августа 2011

Есть инструмент pv, чтобы сделать эту точную вещь: http://www.ivarch.com/programs/pv.shtml

В apt есть версия Ubuntu

...