我有一个文件,其中包含我想知道总文件大小的文件列表。 有这样的命令吗?
我的操作系统是一个非常基本的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}'