I am trying to write a bash script to list the size of each file/subdir of the current directory, as follows:
for f in $(ls -A)
do
du -sh $f
done
I used ls -A
because I need to include hidden files/dirs starting with a dot, like .ssh
. However, the script above cannot handle spaces if the file names in $f
contain spaces.
e.g. I have a file called:
books to borrow.doc
and the above script will return:
du: cannot access `books': No such file or directory
du: cannot access `to': No such file or directory
du: cannot access `borrow.doc': No such file or directory
There is a similar question Shell script issue with filenames containing spaces, but the list of names to process is from expanding *
(instead of ls -A
). The answer to that question was to add double quotes to $f
. I tried the same, i.e., changing
du -sh $f
to
du -sh "$f"
but the result is the same. My question is how to write the script to handle spaces here?
Thanks.