I have a file, which contains the name of some files. I want to find the total size of files in the list.
#cat filelist
/tmp-directory/connector_db_ connector_db
/tmp-directory/connector_db -connector_db
/tmp-directory/connector_db_connector_db
As you can see the names of the file contains space, and more badly a hyphen (-). I am trying to find the total size of these files with below command.
#du -sch `cat filelist`
du: invalid option -- 'o'
du: invalid option -- 'n'
du: invalid option -- 'n'
du: invalid option -- 'e'
du: invalid option -- 't'
du: invalid option -- 'o'
du: invalid option -- 'r'
du: invalid option -- '_'
du: invalid maximum depth `b'
I tried adding " " as shown below and then tried which also failed
#cat filelist
"/tmp-directory/connector_db_ connector_db"
"/tmp-directory/connector_db -connector_db"
"/tmp-directory/connector_db_connector_db"
#du -sch `cat filelist`
du: invalid option -- 'o'
du: invalid option -- 'n'
.....
But this works when I use below command, directly in shell.
#du -sch "/tmp-directory/connector_db -connector_db"
0 /tmp-directory/connector_db -connector_db
0 total
So, how to handle such a situation. I have filelist of 3 lac files. More badly, "du -sch" is not handling the list when file list exceeds around 20000. I am splitting the list into 20000 lines with split command. Is there any alternate method for finding the size of 3 lac files easily?
4.0K /mnt/shared/5 56K /mnt/shared/6 1.1M /mnt/shared/7
– Midhun Jose Jun 09 '17 at 05:48-k
(only) withdu
and get count in kilobytes, and then get the sum of column 1. Something likexargs ... | awk '{ print; s += $1 } END { print s }'
. The output would be in kilobytes, make necessary conversions. – Kusalananda Jun 09 '17 at 06:03