Hay una buena herramienta llamada pv
# On Ubuntu/Debian system
$ sudo apt-get install pv
# On Redhat/CentOS
$ sudo yum install pv
entonces, por ejemplo, puedes usarlo así
$ zcat dbpackfile.sql.gz | pv -cN zcat | mysql -uuser -ppass dbname
Por favor, consulte la ACTUALIZACIÓN 2 para ver mi última versión
ps: consulte este blog http://blog.larsstrand.org/2011/12/tip-pipe-viewer.html
ACTUALIZACIÓN: parece que el enlace anterior está roto pero encontré el mismo artículo aquí http://blog.larsstrand.no/2011/12/tip-pipe-viewer.html
ACTUALIZACIÓN 2: solución aún mejor con la barra de progreso COMPLETA. Para hacerlo, necesitas usar 2 pv
opciones de construcción . Una es --progress
indicar la barra de progreso y la segunda es --size
indicar pv
qué tan grande es el archivo general.
pv --progress --size UNPACKED-FILE-SIZE-IN-BYTES
..el problema es con .gz
el tamaño del archivo original. De alguna manera, necesita obtener la información del tamaño del archivo original sin descomprimirlo, de lo contrario perderá un tiempo precioso para descomprimir este archivo dos veces (la primera vez pv
y la segunda vez zcat
). Pero afortunadamente tiene una gzip -l
opción que contiene información sin comprimir sobre nuestro archivo gziped. Desafortunadamente, lo tiene en formato de tabla, por lo que debe extraerlo antes de poder usarlo. Todos juntos se pueden ver a continuación:
gzip -l /path/to/our/database.sql.gz | sed -n 2p | awk '{print $2}'
Uff ... así que lo último que debes hacer es combinar todos juntos.
zcat /path/to/our/database.sql.gz | pv --progress --size `gzip -l %s | sed -n 2p | awk '{print $2}'` | mysql -uuser -ppass dbname
Para hacerlo aún mejor, puedes agregar progres 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%
ACTUALIZACIÓN 3: Para un uso rápido, cree una función 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
Si no sabe dónde colocarlo, lea esta respuesta:
/unix//a/106606/20056
Puede agregar funciones entre alias. Para que pueda utilizar, por ejemplo, el ~/.bash_aliases
archivo.
pv
,cpipe
) en este escenario?