从包含文件列表的文件中获取总文件大小

我有一个文件,其中包含我想知道总文件大小的文件列表。 有这样的命令吗?

我的操作系统是一个非常基本的Linux(Qnap TS-410)。

编辑:

从文件几行:

/ share / archive / Bailey Test / BD006 / 0.tga
/ share / archive / Bailey / BD007 / 1 version 1.tga
/ share / archive / Bailey 2 / BD007 / example.tga

我相信像这样的东西可以在busybox中工作:

du `cat filelist.txt` | awk '{i+=$1} END {print i}' 

我没有和你一样的环境,但是如果遇到文件名空间的问题,也可以这样做:

 cat filelist.txt | while read file;do du "$file" done | awk '{i+=$1} END {print i}' 

编辑1
@stew在他的post下面是正确的,杜显示磁盘使用情况,而不是确切的文件大小。 要改变行为,busybox使用-a标志,所以请尝试: du -a "$file"以获得确切的文件大小并比较输出/行为。

 du -c `cat filelist.txt` | tail -1 | cut -f 1 

-c增加“总大小”行;
tail -1最后一行(总大小);
cut -f 1删除单词“total”。

 while read filename ; do stat -c '%s' $filename ; done < filelist.txt | awk '{total+=$1} END {print total}' 

这与Mattias Ahnberg的解决scheme类似。 使用“读取”解决与空格的文件名/目录的问题。 我使用stat而不是du来获取文件大小。 du正在获取它在磁盘上使用的空间量,而不是文件大小,这可能是不同的。 根据你的文件系统,一个1字节的文件仍然会在磁盘上占用4k(或者任何块大小)。 所以对于一个1字节的文件,stat表示1个字节,du表示4k。

尝试这样的事情:

 $ cat filelist.txt | xargs ls -l | awk '{x+=$5} END {print "total bytes: " x}' 

正确处理path中的空格:

 $ find /path/to/files -type f -print0 | xargs -0 ls -l | awk '{x+=$5} END {print "total bytes: " x}' 

我不知道你的linux工具是否可以这样做,但是:

 cat /tmp/filelist.txt |xargs -d \\n du -c 

那么,xargs会将分隔符设置为一个换行符,du将为您产生一个总计。

http://busybox.net/downloads/BusyBox.html看来,“busybox du”将支持总计选项,但“busybox xargs”将不支持自定义分隔符。

再一次,我不确定你的工具集。

这是另一个解决问题的方法:

 cat filelist.txt | tr '\n' '\0' | wc -c --files0-from=- 

cat docs.txt | xargs -d \\n du -sk | awk '{total+=$1} END{print total}'