Reputation: 10880
I am a newbie to BASH so please dont mind my stupid questions because I am not able to get any good sources to learn that.
I want to create a script to display filename and its size. This is what the code is like
filename=$1
if [ -f $filename ]; then
filesize=`du -b $1`
echo "The name of file is $1"
echo "Its size is $filesize"
else
echo "The file specified doesnot exists"
fi
The output is like this
$ ./filesize.sh aa
The name of file is aa
Its size is 88 aa
But in the last line I don't want to show the name of the file. How do I do that ? I want to do the same thing using wc as well.
Upvotes: 0
Views: 234
Reputation: 882766
All levels of question are accepted here.
You can use awk
to only get the first field:
du -b /path/to/file | awk '{print $1}'
Your script would then be something like:
filename=$1
if [ -f ${filename} ]; then
filesize=$(du -b ${filename} | awk '{print $1}')
echo "The name of file is ${filename}"
echo "Its size is ${filesize}"
else
echo "The file specified does not exists"
fi
You'll notice I've changed a couple of other things as well:
$(X)
to `X` for capturing output of command simply because they're easier to nest.$1
into $filename
, you may as well use $filename
from that point on (the $1
in the awk
is a different beast).${}
so that it's obvious to both the reader and the shell that ${var}X
is $var
appended with X
, rather than $varX being the non-existent ${varX}.These are really personal preferences but, as with all my personal preferences, I consider them best practices for the entire IT industry :-)
Upvotes: 0
Reputation: 3664
You can use awk to pick out the first column of data.
filesize=`du -b $1 | awk '{print $1}'`
Upvotes: 0
Reputation: 6093
Instead of using du -b $1
use du -b $1 | cut -f 1
. It will only include the first field of output of du command, therefore only reporting the size of the file.
Upvotes: 0
Reputation: 370465
filesize=`du -b $1 | cut -f 1`
cut -f 1
splits its input by tabs and then outputs the first field (i.e. it returns each line of du
's output up to the fist tab character.).
Upvotes: 1
Reputation: 1195
You could use awk to split the output of du at the first space, as follows:
filesize=`du -b $1 | awk '{ print $1; }'`
Upvotes: 0
Reputation: 30248
Use stat(1)
filename=$1
if [ -f $filename ]; then
filesize=`stat -c %s $1`
echo "The name of file is $1"
echo "Its size is $filesize"
else
echo "The file specified doesnot exists"
fi
See also man 1 stat
Upvotes: 3