Скопируйте файл в GNU / Linux с индикатором выполнения и ограничением скорости

9847
Vi.

Есть ли какой-нибудь хороший инструмент в GNU / Linux, который копирует файлы вроде cp, но также показывает прогресс и ограничивает скорость (и изменяет лимит без прерываний), напримерpv ?

Прототип:

find source_directory | cpio -H newc -o | pv -s `du -bs source_directory/ | awk ''` | (cd /destination/directory && cpio -di) 

Также rsync -aP source_directory /destionation/directory/, но это показывает индикаторы выполнения индивидуально и не может изменить скорость после запуска.

Или, может быть, я должен просто написать обертку для PV / CPIO? Готово.

7

3 ответа на вопрос

9
Vi.

Написан скрипт для использования find, cpio и pv для выполнения задачи. Скорость может быть ограничена.

http://vi-server.org/vi/bin/cppv

Зеркальное отражение здесь:

#!/bin/bash   set -e  if [ $# -lt 2 ]; then echo "cppv - copy files with progress bar and rate limiting ability" echo "Usage: cppv source_file[s] destination_file_or_directory" echo "No other non-positional command line arguments can be given" echo "Always recurses like find" echo "You can change copying speed limit on the fly with \"pv -R\" if you find out pv's PID" echo "Use FIND_OPTS, PV_OPTS, CPIO_O_OPTS, CPIO_I_OPTS to override arguments to the pipeline parts" echo "Examples:" echo " cppv a b # Copy file a to b. Just calls \"pv a > b\"" echo " cppv a d/ # Copy file a to d/a. Calls \"find a | cpio -o | pv | (cd d && cpio -i)\"" echo " cppv **.mkv /mnt/usb/ # Copy all matching files to /mnt/usb/." echo " cppv dir1 dir2 # duplicate dir1" echo " PV_OPTS=\"-L 1M\" cppv . /tmp/ # Limit copying rate to 1M" echo " cppv /home/vi/bin /tmp/ # Warning: Copy /home/vi/bin to /tmp/home/vi/bin" exit 1 fi;  true $ true $ true $  ARGS=( "$@" );  DEST="$" unset ARGS[$#-1];  if [[ ( "$" == "-" && ! -e "$1" ) || ( "$" == "-" && ! -e "$DEST" ) ]]; then echo "There should not be any command line options. Only file names." >&2 exit 1; fi  DIRMODE=0  if [[ $# > 2 || "$-1:1}" == "/" || -d $DEST ]]; then DIRMODE=1 elif [[ -d "$1" && ! -d "$2" ]]; then DIRMODE=1 mkdir "$DEST"; DEST=`readlink -f "$DEST"`; cd "$1"; ARGS=(".") fi  if [ $DIRMODE == 0 ]; then pv "$1" > "$2" && exit 0; fi;  if [ ! -d "$DEST" ]; then echo Not a directory: "$DEST" >&2 exit 1 fi  if [ "$" == "/" ]; then echo "Warning: it will do a bit different thing than usual cp" >&2 echo " For example, copying $1 to $DEST$1, not to $DEST/`basename $1`" >&2 fi  SIZE=`du -sb "$" | perl -ne '/^(\d+)/ and $q+=$1; END'`  find "$" $FIND_OPTS | cpio $CPIO_O_OPTS | pv -s $SIZE $PV_OPTS | (cd "$DEST" && cpio $CPIO_I_OPTS) 

Кто-нибудь, пожалуйста, проверьте это.

+1 для вас! Боюсь, я не могу найти время для тестирования, но это выглядит довольно многообещающе! Хорошо сделано! BloodPhilia 14 лет назад 0
Что такое "pv"? Это [Pipe Viewer] (http://www.ivarch.com/programs/pv.shtml)? (Он не установлен в Ubuntu 10.04 по умолчанию, поэтому у меня его нет). Stefan Lasiewski 14 лет назад 0
@ Stefan Lasiewski Да, это так. `apt-get install pv` Vi. 14 лет назад 1
Примечание для пользователей: скрипт не работает с большими (> 2 ГБ) файлами. Vi. 12 лет назад 1
1
BloodPhilia

Я предлагаю вам проверить это: http://bash.cyberciti.biz/guide/A_progress_bar_%28gauge_box%29#File_Copy_Progress_Bar_With_Dialog

Это выглядит довольно аккуратно! знак равно

Это выглядит действительно аккуратно! Спасибо! dag729 14 лет назад 0
@ dag729 Добро пожаловать! ;) BloodPhilia 14 лет назад 0
«tt будет увеличиваться при каждом копировании файла в $ DEST» - плохо, я хочу, чтобы он работал как для множества маленьких файлов, так и для одного большого. И нет ограничения скорости. Vi. 14 лет назад 0
@Vi - может быть, ты немного адаптируешься? Это только пример того, как отображать индикатор выполнения. BloodPhilia 14 лет назад 1
Нет, я написал обертку вокруг "cpio | pv | cpio". Скоро опубликую это здесь. Vi. 14 лет назад 0
1
saurabh

Попробуй gcp. Должно быть доступно на Ubuntu.

Работает (хотя обработка специальных файлов отсутствует) Vi. 12 лет назад 0
Отлично установлен на Ubuntu Oneric, но выдает ошибки и вылетает при простом `назначении файла gcp` capdragon 12 лет назад 0

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