disk space used for files with in a directory structure.

Hello,
I am new to shell scripting and would really appreciate if someone could help me with this question.

I have a directory structure as follows..
main directory is DATA under which i have different directories names fileserver01, fileserver02 ... till fileserver 15.

under each of these there are more subdirectories named
123456, 123567,123984..... 234859,234503.. etc.

under each of these six digit subdirectory there are more subdirectories named subdir1, subdir2, subdir3... subdir7, which in turn contains individual files.

Now, my question is.. how can I find the disk space used by certain amount of files(not starting with "deleted") under subdir1,subdir3 and subdir4. also, the disk space should be based on the first three digits of the directories starting with eg..123, 234 etc.
ie. I need to find the diskspace of DATA/iterate thro' all fileservers/grouped under the matching first three digits eg 123*)/specified directories eg.subdir1,subdir3,subdir4)/(files not starting with "deleted").
I hope my question is clear.
I am using Ksh.

Thanks in advace.

I am not quite sure what you are looking for, but du -sk is probably the command you want to use. Read the man page on du.

I too am lost, but if you cd to fileserver1, you can do:
find 123* -type f
to get a list of files under the 123* directory. Is this a list of files that you want? Next you can do:
find 123* -type f | xargs ls -s
to see the files with their sizes. Just want a total? Use:
find 123* -type f | xargs -s | awk '{x+=$1} END {print x}'
Since -s is giving the size in blocks you might want to use "print x * 512" to get the size in bytes. This should be enough ideas to get you started.

Sorry for the confusion which I created. I have two more twists to Perderabo's solution :slight_smile: Under each 123* directory.. there are more subdirectories out of which I do not pick two particular subdirectories named subdir2 and subdir5. From the remaining subdirectories, I pick only those files whose names do not start with "deleted".

find 12* -type f | xargs ls -s | egrep -v "subdir2|subdir5|deleted"

If subdir2 and/or subdir5 are very large or if there are a lot of delete* files, this will slow down as it does work which is discarded by the grep processes. A complex find statement can produce a list of only the desired files...

find 123* \( -name subdir2 -o -name subdir5 -prune \) -o -type f ! -name delet\*

Excellent Perderabo !
If a i add -prune after suddir2 to eliminate subdir2 files ????
Following did work for me on AIX.

find 1234* \( -name subdir2 -prune -o -name subdir5 -prune \) -o -type f ! -name delet\*

Good catch, bhargav! I gotta learn to test stuff like that. This also seems to work on SunOS...

find 123* \( \( -name subdir2 -o -name subdir5 \) -prune \) -o -type f ! -name delet\*

Thanks for the very quick reply guys!! This works very good for me.