我有一个文件,其中包含一些文件的名称。我想在列表中找到文件的总大小。
#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'
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'
我尝试如下所示添加“”,然后尝试也失败了
#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'
.....
但这在我直接在shell中使用以下命令时有效。
#du -sch "/tmp-directory/connector_db -connector_db"
0 /tmp-directory/connector_db -connector_db
0 total
因此,如何处理这种情况。我有3个lac文件的文件列表。更糟糕的是,当文件列表超过20000左右时,“ du -sch”不处理列表。我使用split命令将列表分为20000行。是否有其他方法可以轻松找到3个lac文件的大小?
由于您还没有在命令替换两边加上引号,因此根据IFS
(空格,制表符,换行符的值)的值在此处进行了字分割。你必须在文件名空间,所以如/tmp-directory/connector_db_ connector_db
将分为两个词- ,。/tmp-directory/connector_db_
connector_db
您可以一个一个地遍历文件名:
while IFS= read -r file; do du -sch -- "$file"; done <filelist
由于文件很大,因此可能需要一些时间。
另外,由于文件是单独解析的,因此您不会显示的总大小du
。因此,您可以删除-s
并-c
:
while IFS= read -r file; do du -h -- "$file"; done <filelist
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句