我有一个包含文件列表的文件,我想知道文件的总大小。有没有命令可以做到这一点?
我的操作系统是一个非常基本的 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=-