9 авг. 2010 г.

Копирование в консоли с прогрессбаром

Каждый, кто копировал/архивировал/дампил что-то большое консольно, задумывался "а когда ж все это завершится?". То есть мечтал о прогрессбаре. Найденные на просторах Хабра pipeviewer (pv) и скрипт bar отчасти проблему решают (в плане архивов и дампов), однако для меня наиболее частой операцией подобного рода является копирование папок с большим количеством файлов, опрогрессбарить которое ни тому, ни другому не под силу. И найденный позже рецепт копировать rsync'ом (rsync -r --progress /path/from/ /path/to/) также не стал панацеей, так как он показывает прогресс каждого файла, а не общий, как хотелось бы. В итоге решение все же есть. Модифицированный GNU cp под рабочим названием Advanced Copy имеет дополнительную опцию -g, при указании которой программа рисует прогрессбар процесса копирования файла, а если речь идет о директории, то -gR рисует уже два прогрессбара, для текущего копируемого файла и общего процесса копирования в целом.
Для работы вполне достаточно взять готовый бинарник и положить куда-нибудь в $PATH (разработчики рекомендуют заменить стандартный cp, я же просто положил его рядышком, обозвав cpbar'ом ;)), предварительно разархивировав, конечно, и поставив бит исполнения (+x).
Если вдруг не заработало, или это не ваш метод, на странице проекта можно получить инструкцию о том, как пропатчить GNU cp и скомпилировать модифицированный бинарь самостоятельно.