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

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

我有一个包含文件列表的文件,我想知道文件的总大小。有没有命令可以做到这一点?

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

编辑:

文件中的几行内容:

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

答案1

我相信这样的事情会在 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 在下面的帖子中说得对,du 显示的是磁盘使用情况,而不是确切的文件大小。要更改行为,busybox 会使用 -a 标志,因此请尝试:du -a "$file"获取确切的文件大小并比较输出/行为。

答案2

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

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

答案3

我不知道你的 Linux 工具是否可以做到这一点,但是:

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

这样做,xargs 将把分隔符设置为换行符,并且 du 将为您生成总计。

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

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

答案4

这是该问题的另一种解决方案:

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

相关内容