
directory1
だからdirectory2
。しかし、私のコードによると、これはディレクトリ内の1つのファイルに対してのみ行われます。複数のファイルで動作させるにはどうすればよいですか?以下のコードで問題が見つかりました。
#!/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
サイズをバイト、KB、または MB 単位で報告するオプションがあり、ディスク使用量 (既定値) またはレポートのサイズ (スパスファイルの場合は異なる) を報告するようにdu
要求することもできます。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
サイズを50 MB減らす必要があります。
> du --exclude-from <(basename -a dir2/*) -s dir1
40964 dir1