• Welcome to Bashguru

    Linux is one of popular version of UNIX operating System. It is open source as its source code is freely available. It is free to use. Linux was designed considering UNIX compatibility. It's functionality list is quite similar to that of UNIX and become very popular over the last several years. Our Basic motive is to provide latest information about Linux Operating system.

  • Python Programming

    Python is a comparatively simple programming language, compared to c++. Although some of the benefits of c++ are abstracted away in python, they are replaced with an overall easier to learn language with many “intuitive” features. For this reason it is common and recommended by most professionals that people new to programming start with python.

  • Perl Programming

    Perl is an open-source, general-purpose interpreted programming language. Used often for CGI, Perl is also used for graphics programming, system administration, network programming, finance, bioinformatics, and other applications. The Perl languages borrow features from other programming languages including C, shell scripting (sh), AWK, and sed. They provide powerful text processing facilities without the arbitrary data-length limits of many contemporary UNIX command line tools, facilitating easy manipulation of text files.

  • Android

    Android is an operating system based on the Linux kernel, and designed primarily for touch screen mobile devices such as smart phones and tablet computers. Android is a Linux-based software system, and similar to Linux, is free and open source software. This means that other companies can use the Android operating developed by Google and use it in their mobile devices.Android gives you a world-class platform for creating apps and games for Android users everywhere, as well as an open marketplace for distributing to them instantly.

Monday, December 28, 2009

Posted by venu k
3 comments | 10:46 PM
This is the upgrade version of the ddcopy_progress.sh script posted on 2nd November.

#!/bin/bash
#
# SCRIPT: ddcopy.sh
# PURPOSE: Copies files and shows the progress of copying.
#
#............................USAGE...........................
# This script copies only files not directories
# ddcopy <Source filename or Path> <Destination filename or Path>
# ddcopy <Source filename or Path> <Destination Directory or Path>


##################################################################
# Arguments Checking #
##################################################################

if [ $# -eq 0 ] # Look for parameters supplied or not
then
echo "$0: missing file operand"
exit 1
fi

if [ $# -eq 1 ] # Look for exactly one parameter
then
echo "$0 : missing destination file operand after '$1'"
exit 1
fi

if [ $# -eq 2 ]
then
Source="$1"
Dest="$2"
if [ ! -e "$1" ] # Check source file exist or not
then
echo "$0: cannot stat '$1': No such file or directory"
exit 1
elif [ -d "$1" ]
then
echo "$0: Source file '$1' is a directory"
exit 1
fi

egrep -q "^\/|\/$" <<<$2

if [ $? -eq 0 -a ! -d $2 ]
then
echo "$0: cannot create regular file '$2' : Is a directory"
exit 1
fi

if [ -d "$2" ]
then
filename=`basename "$1"`
$(egrep -q "\/$" <<<$2) && Dest="$2$filename" || Dest="$2/$filename"
fi

if [ -e "$Dest" -a -f "$Dest" ]
then
echo -n "$0: $Dest already exist : overwrite '$Dest' (y/n)? "
read answer
if [ "$answer" = "n" -o "$answer" = "N" ]
then
exit 1
fi
fi
fi

###################################################################
# DEFINE VARIABLES HERE #
###################################################################

Seek=0 # skip BLOCKS bs-sized blocks at start of output
Skip=0 # skip BLOCKS bs-sized blocks at start of input
Bsize=128000 # block size
size=`stat -c %s "$Source"`

# Bellow 25MB files copied directly with copy command
# If you want progress bar for < 25MB files also, remove bellow
# if block

if [ $size -lt 25000000 ]
then
cp "$Source" "$Dest"
exit 0
fi

blocks=$((size/Bsize)) # total blocks of input file

lastblock=$((size%Bsize)) # last block, which size < $Bsize

# If last block size is > 0 then add 1 block to existing blocks.

if [ $lastblock -gt 0 ]
then
let blocks++
fi

# I am dividing screen width 60 as 20 parts.Each part is filled
# with a colour after each iteration.

# Make blocks count dividable by 20.

addblocks=$((blocks%20))
if [ $addblocks -gt 0 ]
then
adjustblocks=$((20-addblocks))
blocks=$((blocks+adjustblocks))
fi

Count=$((blocks/20))

# Count variable contain number of blocks to be copied for
# each iteration

###################################################################
# MAIN PROGRAM STARTS HERE #
###################################################################

printf "\e[40m\e[43m%60s\n\e[A" " "

for ((i=1;i<=20;i++))
do

dd if="$Source" of="$Dest" bs=128kB seek=$Seek skip=$Skip \
count=$Count 2>/dev/null

Skip=$((Skip+$Count))
Seek=$((Seek+$Count))
j=$((j+3)) # 60/20 each part is 3 chars length

printf "\e[40m\e[7m%${j}s\n\e[A" " "
# echo -e "\033[7m \c"

done
printf "\e[0m\n"
#echo -e "\033[0m"

OUTPUT:
Screen Shot1:

Screen Shot2:

Screen Shot3:

3 comments:

  1. apt-get install pv
    #pipe view

    pv dest

    root@bort-x61t:~# pv /dev/null
    ^C52GB 0:00:16 [77.5MB/s] [===> ] 5% ETA 0:04:58


    have fun!

    ReplyDelete
  2. darn....
    it's pv smaller source larger dest...
    or just manpage a little ;D

    ReplyDelete