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