Existe uma boa ferramenta chamada pv
# On Ubuntu/Debian system
$ sudo apt-get install pv
# On Redhat/CentOS
$ sudo yum install pv
então, por exemplo, você pode usá-lo assim
$ zcat dbpackfile.sql.gz | pv -cN zcat | mysql -uuser -ppass dbname
Verifique a atualização 2 para a minha versão mais recente
ps: consulte este blog http://blog.larsstrand.org/2011/12/tip-pipe-viewer.html
UPDATE: parece que o link acima está quebrado, mas eu encontrei o mesmo artigo aqui http://blog.larsstrand.no/2011/12/tip-pipe-viewer.html
ATUALIZAÇÃO 2: Solução ainda melhor com a barra de progresso COMPLETA. Para fazer isso, você precisa usar 2 pv
opções de compilação . Uma é --progress
indicar a barra de progresso e a segunda é --size
dizer pv
o tamanho do arquivo geral.
pv --progress --size UNPACKED-FILE-SIZE-IN-BYTES
..o problema está no .gz
tamanho do arquivo original. De alguma forma, você precisa obter as informações do tamanho do arquivo original descompactado sem descompactá-lo, caso contrário, perderá um tempo precioso para descompactar esse arquivo duas vezes (primeira pv
e segunda vez zcat
). Mas, felizmente, você tem a gzip -l
opção que contém informações não compactadas sobre o arquivo gziped. Infelizmente você o possui no formato de tabela, portanto é necessário extrair antes de poder usá-lo. Todos juntos podem ser vistos abaixo:
gzip -l /path/to/our/database.sql.gz | sed -n 2p | awk '{print $2}'
Uff .. então a última coisa que você precisa fazer é apenas combinar tudo.
zcat /path/to/our/database.sql.gz | pv --progress --size `gzip -l %s | sed -n 2p | awk '{print $2}'` | mysql -uuser -ppass dbname
Para torná-lo ainda melhor, você pode adicionar os programas NAME como este
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
Resultado final:
Importing.. : [===========================================>] 100%
ATUALIZAÇÃO 3: Para uso rápido, crie uma função personalizada.
mysql_import() {
zcat $2 | pv --progress --size `gzip -l %s | sed -n 2p | awk '{print $2}'` --name ' Importing.. ' | mysql -uuser -ppass $1
}
uso:
mysql_import dbname /path/to/our/database.sql.gz
Se você não souber onde colocá-lo, leia esta resposta:
/unix//a/106606/20056
Você pode adicionar funções entre aliases. Então você pode usar, por exemplo, ~/.bash_aliases
arquivo.
pv
,cpipe
) funcionam neste cenário?