Shell Scripting Hack: cp Command With a Progress bar

Posted on in Categories Howto, Linux, Shell scripting last updated January 24, 2008

This is a nice shell scripting hack. It allows you to give a progress bar like wget to cp command.

12 comment

  1. Vivek,

    This is cool and all, but the overhead of strace make this not very useful. rsync -av shows a progress bar. You can also get a progress bar if you use scp locally. Yes, scp supports local file transfers without using any network or connecting to a local sshd instance.

    [email protected]:~$ du -h windows.tar.bz2
    822M windows.tar.bz2
    
    [email protected]:~$ time cp_p windows.tar.bz2{,.new}
    99% [====================================================================================================>]
    
    real 2m18.957s
    user 0m11.589s
    sys 0m23.469s
    [email protected]:~$ ls window*
    windows.tar.bz2 windows.tar.bz2.new
    [email protected]:~$ time cp windows.tar.bz2{,.new2}
    
    real 1m39.597s
    user 0m0.096s
    sys 0m5.092s
  2. LOL at the nubs who can’t get this to work. Go back to your Vista box and stay there.

    Only thing I had to do was set my terminal to ANSI. Also, the width of this progress bar is fixed, it will not scale with the width of your terminal.

    Also note that for trivial transfers they might complete before the script has a chance to output the progress bar. So if the file copies and you didn’t see a progress bar, it’s because you didn’t need one.

    yes scp and rsync are alternatives but this is very cool nonetheless. Thank you for posting it!

  3. Altho my system didn’t support bar I did find pipeview (pv):

    srcdir=$1
    outfile=$2

    tar -Ocf – $srcdir | pv -i 1 -w 50 -berps `du -bs $srcdir | awk ‘{print $1}’` |
    7za a -si $outfile

Leave a Comment