我有一个包含文件列表的文件,我想知道文件的总大小。有命令这样做吗?
我的操作系统是一个非常基本的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
我有一个包含文件列表的文件,我想知道文件的总大小。有命令这样做吗?
我的操作系统是一个非常基本的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
Answers:
我相信这样的事情会在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"
获得精确的文件大小并比较输出/行为。
/usr/bin/du: Argument list too long
(我的文件中几乎有80,000行)。第二个命令只是在我按Enter键后提示我,还等什么呢?
cat tgafiles.txt | while read file;do du "$file" done | awk '{i+=$1} END {print i}'
。感谢mattias
cat tgafiles.txt | while read file;do du "$file";done | awk '{i+=$1} END {print i}'
即完成之前)。
du -c `cat filelist.txt` | tail -1 | cut -f 1
-c
添加行“总大小”;
tail -1
最后一行(总大小);
cut -f 1
删去单词“ total”。
我不知道您的Linux工具是否能够做到这一点,但是:
cat /tmp/filelist.txt |xargs -d \\n du -c
这样做,xargs会将分隔符设置为换行符,而du将为您产生总计。
查看http://busybox.net/downloads/BusyBox.html,似乎“ busybox du”将支持总计选项,但“ busybox xargs”将不支持自定义定界符。
同样,我不确定您的工具集。
xargs: invalid option -- d
-c
因为du
如果文件列表足够长,xargs会进行多次调用,从而产生多个du
总数。
while read filename ; do stat -c '%s' $filename ; done < filelist.txt | awk '{total+=$1} END {print total}'
这类似于Mattias Ahnberg的解决方案。使用“读取”可以解决文件名/目录带有空格的问题。我使用stat
而不是du
获取文件大小。du获取的是它在磁盘上使用的空间量,而不是文件大小,这可能有所不同。根据您的文件系统,一个1字节的文件仍会占用磁盘4k(或任何块大小)。因此,对于1字节的文件,stat表示1字节,du表示4k。
stat
命令:stat: command not found
stat: applet not found
在这种情况下
尝试这样的事情:
$ cat filelist.txt | xargs ls -l | awk '{x+=$5} END {print "total bytes: " x}'
要正确处理路径中的空格:
$ find /path/to/files -type f -print0 | xargs -0 ls -l | awk '{x+=$5} END {print "total bytes: " x}'
find
吗?
find
而不是真正的find
二进制文件。