Pipe Viewer, пример использования
Ожидает приглашения

(Может быть эта пицца спасет кого-нибудь от голодного обморока)
Задача: Есть папка с миллионами файлов, которые нужно запаковать, не нагружая при этом жесткий диск, поскольку он активно используется другими процессами. Простое использование архиватора tar приведет к большой загрузке, тем самым остановив работу более важных процессов.
Решение: Встречайте Pipe Viewer! Он позволяет ограничивать скорость передачи данных в конвейере. А, кроме того, его основной род занятий — это отображение полноценного прогресс бара, и мы будем видеть сколько времени займет весь процесс архивации.
Простой пример использования pv для запаковки файла:
cat file.log | pv -s 123666007 -L 512k | gzip > file.log.gz
Примечание: 123666007 — размер файла file.log в байтах, 512k — лимит скорости чтения с дискаА вот и сам скрипт с решением задачи: ссылка на гитхаб.
Конкретный пример использования: Если я хочу запаковать миллионы файлов за 2 года из папки /home/usrok/baddir в папку /home/userok/archives, для этого заменяем строки в скрипте:
SOURCE_DIR=/path/to/source/dir
TARGET_DIR=/path/to/target/dir
наSOURCE_DIR=/home/usrok
TARGET_DIR=/home/userok/archives
и вызываем скрипт пару раз (предварительно задав скрипту права на исполнение):./archive_millions_files_dir.sh 512k baddir 2012
./archive_millions_files_dir.sh 512k baddir 2013
В результате создадутся архивы
/home/userok/archives/2012/baddir.tar.gz
/home/userok/archives/2013/baddir.tar.gz
с файлами за 2012 и 2013 год, соответственно.Кстати, если выполнить
./archive_millions_files_dir.sh 512k baddir 2014 1
то создастся архив/home/userok/archives/2014/01/baddir.tar.gz
с файлами за январь 2014 года.Спасибо за внимание. Жалобы на качество исполнения приветствуются. Конструктивная критика особенно.