Подтвердить что ты не робот

Как я могу создать индикатор выполнения (cp копирование каталога)?

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

4b9b3361

Ответ 1

Вы также можете использовать rsync вместо cp следующим образом:

rsync -Pa source destination

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

Ответ 2

Чтобы отобразить индикатор выполнения при выполнении рекурсивной копии файлов и папок и вложенных папок (включая ссылки и атрибуты файлов), вы можете использовать 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

Ответ 3

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

ИЗМЕНИТЬ

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

В большинстве дистрибутивов есть пакет для него.

Ответ 4

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

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

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

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

Ответ 5

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

Ответ 7

Мой предпочтительный вариант 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/mv. Вы можете заменить существующие команды:

$ sudo cp src/cp /usr/local/bin/cp
$ sudo cp src/mv /usr/local/bin/mv

Ответ 8

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

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.

Ответ 9

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

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

введите описание изображения здесь

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