Pull to refresh

Pipe Viewer, пример использования

image
(Может быть эта пицца спасет кого-нибудь от голодного обморока)

Задача: Есть папка с миллионами файлов, которые нужно запаковать, не нагружая при этом жесткий диск, поскольку он активно используется другими процессами. Простое использование архиватора 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 года.

Спасибо за внимание. Жалобы на качество исполнения приветствуются. Конструктивная критика особенно.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.