Я полагаю, что я мог бы сравнить количество файлов в исходном каталоге с количеством файлов в целевом каталоге по мере продвижения cp или, возможно, сделать это с размером папки? Я попытался найти примеры, но все скобки прогресса bash, похоже, написаны для копирования отдельных файлов. Я хочу скопировать кучу файлов (или каталог, если первый невозможен).
Как я могу создать индикатор выполнения (cp копирование каталога)?
Ответ 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 минус: нет полосы выполнения
Ответ 6
Для этого нужно инструмент pv
: http://www.ivarch.com/programs/pv.shtml
Там версия ubuntu в apt
Ответ 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
, но вы можете использовать его для рекурсивно скопировать каталоги
Вы можете получить здесь