Есть хороший инструмент под названием pv
# On Ubuntu/Debian system
$ sudo apt-get install pv
# On Redhat/CentOS
$ sudo yum install pv
тогда, например, вы можете использовать это так
$ zcat dbpackfile.sql.gz | pv -cN zcat | mysql -uuser -ppass dbname
Пожалуйста, проверьте ОБНОВЛЕНИЕ 2 для моей последней версии
PS: проверьте этот блог http://blog.larsstrand.org/2011/12/tip-pipe-viewer.html
ОБНОВЛЕНИЕ: похоже, что выше ссылка не работает, но я нашел ту же статью здесь http://blog.larsstrand.no/2011/12/tip-pipe-viewer.html
ОБНОВЛЕНИЕ 2: Еще лучшее решение с полной шкалой прогресса. Для этого вам нужно использовать 2 встроенные pv
опции. Одним из них является , --progress
чтобы показать прогресс бар и второй это --size
сказать , pv
насколько большой общий файл.
pv --progress --size UNPACKED-FILE-SIZE-IN-BYTES
проблема в .gz
оригинальном размере файла Вам нужно каким-то образом получить распакованную информацию о оригинальном размере файла, не распаковывая ее самостоятельно, иначе вы потеряете драгоценное время, чтобы распаковать этот файл дважды (первый раз pv
и второй раз zcat
). Но, к счастью, у вас есть gzip -l
опция, которая содержит несжатую информацию о нашем файле gziped. К сожалению, у вас есть это в табличном формате, поэтому вам нужно извлечь его, прежде чем его можно будет использовать. Все вместе можно увидеть ниже:
gzip -l /path/to/our/database.sql.gz | sed -n 2p | awk '{print $2}'
Уф ... так что последнее, что вам нужно сделать, это просто объединить все вместе.
zcat /path/to/our/database.sql.gz | pv --progress --size `gzip -l %s | sed -n 2p | awk '{print $2}'` | mysql -uuser -ppass dbname
Чтобы сделать его еще лучше, вы можете добавить progres NAME, как это
zcat /path/to/our/database.sql.gz | pv --progress --size `gzip -l %s | sed -n 2p | awk '{print $2}'` --name ' Importing.. ' | mysql -uuser -ppass dbname
Конечный результат:
Importing.. : [===========================================>] 100%
ОБНОВЛЕНИЕ 3: Для быстрого использования создайте пользовательскую функцию.
mysql_import() {
zcat $2 | pv --progress --size `gzip -l %s | sed -n 2p | awk '{print $2}'` --name ' Importing.. ' | mysql -uuser -ppass $1
}
использование:
mysql_import dbname /path/to/our/database.sql.gz
Если вы не знаете, где его поставить, прочитайте этот ответ:
/unix//a/106606/20056
Вы можете добавить функции среди псевдонимов. Таким образом, вы можете использовать, например, ~/.bash_aliases
файл.
pv
,cpipe
) в этом сценарии?