如何求目录下文件大小的总和

如何求目录下文件大小的总和

directory1所以我想求和并显示仅包含在但不包含在 中的文件的大小总和directory2。但是,根据我的代码,这只是针对目录中的一个文件完成的,如何使其适用于多个文件?下面的代码是发现问题的地方:

#!/bin/bash
dir1=$1
dir2=$2

echo Files that are included only in directory1 and not in directory2
diff $dir1 $dir2 | egrep $dir1 | wc -l
diff $dir1 $dir2 | egrep $dir1 
files=$(diff $dir1 $dir2 |egrep $dir1 |awk '{print $4}')
ls -l ./$dir1/$files | awk '{t+=$5}END{print t}'

答案1

最佳用途du

du -s directory报告所有文件和子目录使用的大小。您可以使用 给出du排除列表--exclude-from,因此在您的情况下,此排除列表将是 中的文件名称dir2,可以使用 轻松获得basename -a dir2/*--exclude-from需要一个文件,但我们不需要创建一个真正的文件,我们可以使用“进程替换”。将它们放在一起:

du --exclude-from <(basename -a dir2/*) -s dir1 

du一些选项可以报告大小(以字节、KB 或 MB 为单位),您还可以要求它报告磁盘使用情况(默认)或报告的大小ls(这对于稀疏文件来说不同)。

例如,从以下内容开始:

├── dir1
│   ├── file1
│   ├── file2
│   ├── file3
│   ├── file4
│   └── file5
└── dir2
    ├── file5
    └── file6

du -c dir1/*报告:

10240   dir1/file1
10240   dir1/file2
10240   dir1/file3
10240   dir1/file4
51200   dir1/file5
92160   total

排除dir2文件将被排除file5,因此大小应减少 50MB:

> du --exclude-from <(basename -a dir2/*) -s dir1
40964   dir1

相关内容