There is a nice tool called pv
.
# On Ubuntu/Debian system
$ sudo apt-get install pv
# On Redhat/CentOS
$ sudo yum install pv
then e.g. you can use it like this
$ zcat dbpackfile.sql.gz | pv -cN zcat | mysql -uuser -ppass dbname
NOTE: Please check this blog
http://blog.larsstrand.no/2011/12/tip-pipe-viewer.html for more
insights.
NOTE: Even better solution with FULL progress bar. To do it you
have to use two build-in pv
options. One is --progress
to indicate
the progress bar and the second is --size
to tell pv
how large the
overall file is.
pv --progress --size UNPACKED-FILE-SIZE-IN-BYTES
..the problem is with .gz
original file size. You need somehow get unpacked original file size information without unpacking itself, otherwise, you will lose precious time to unpack this file twice (first time for pv
and second time for zcat
). But fortunately, you have gzip -l
option that contains uncompressed information about our gzipped file. Unfortunately, it is in a table format so you need to extract it before it can be used it. All together can be seen below:
gzip -l /path/to/our/database.sql.gz | sed -n 2p | awk '{print $2}'
NOTE: This is the list of most common archive tools and methods how to extract a number of uncompressed bytes from those archives:
tar -tvf database.sql.tar | awk '{print $3}' | paste -sd+ | bc
unzip -Zt database.sql.zip | awk '{print $3}'
unrar l database.sql.rar | tail -n2 | head -n1 | awk '{ print $1 }'
7z l database.sql.7z | tail -n1 | awk '{ print $3 }'
Uff.. so the last thing you need to do is just combine it all together.
zcat /path/to/our/database.sql.gz | pv --progress --size `gzip -l %s | sed -n 2p | awk '{print $2}'` | mysql -uuser -ppass dbname
To make it even nicer you can add progress NAME like this
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
Final result:
Importing.. : [===========================================>] 100%
For quick usage, you can create a custom function.
mysql_import() {
zcat $2 | pv --progress --size `gzip -l %s | sed -n 2p | awk '{print $2}'` --name ' Importing.. ' | mysql -uuser -ppass $1
}
..and then use it like this:
mysql_import dbname /path/to/our/database.sql.gz
NOTE: If you don't know where to put it, read this answer:
https://unix.stackexchange.com/a/106606/20056
NOTE: You can add functions among aliases, e.g. in ~/.bash_aliases
file.
pv
,cpipe
) work in this scenario?pv
is exactly what the questioner searches for. I just installed it on CentOS via rpmforge. If given the size-parameter it will even show an ETA.pv
did the trick indeed! If somebody can make this an answer, I can accept this!