tags:

views:

94

answers:

2

I am new to more advanced bash commands. I need a way to count the size of external libraries in our codeline. There are a few main directories but I also have a spreadsheet with the actual locations of the libraries that need to be included.

I have fiddled with find and du but it is unclear to me how to specify multiple locations. Can I find the size of several hundred jars listed in the spreadsheet instead of approximating with the main directories?

edit: I can now find the size of specific files. I had to export the excel spreadsheet with the locations to a csv. In PSPad I "joined lines" and copy and paste that directly into the list_of_files slot. (find list_of_files | xargs du -hc). I could not get find to utilize a file containing the locations separated by a space/tab/line.

Now I can't tell if replacing list_of_files with list_of_directories will work. It looks like it counts things twice e.g.

1.0M /folder/dummy/image1.jpg  
1.0M /folder/dummy/image2.jpg  
2.0M /folder/dummy  
3.0M /folder/image3.jpg  
7.0M /folder  
14.0M total

This is fake but if it's counting like this then that is not what I want. The reason I suspect this is because the total I'm getting seems really high.

+1  A: 

Do you mean...

find list_of_directories | xargs du -hc

Then, if you want to exactly pipe to du the files that are listed in the spredsheet you need a way to filter them out. Is it a text file or which format?

find `(cat file)` | xargs du -hc

might do it if they are in a txt file as a list separated by spaces. Probably you will have some issues regarding the spaces... You have to quote the filenames.

alvatar
A: 
for fn in `find DIR1 DIR2 FILE1 -name *.jar`; do du $fn; done | awk '{TOTAL += $1} END {print TOTAL}'

You can specify your files and directories in place of DIR1, DIR2, FILE1, etc. You can list their individual sizes by removing the piped awk command.

Rob Hruska