ディレクトリを作成するとしますtest/
、2つのファイル(test/a
、test/b
)および内部ディレクトリtest/c
ファイル付きtest/c/d
、 このような:
mkdir test
cd test
touch a
echo 1 > a
touch b
echo 1 > b
mkdir c
cd c
touch d
echo 1 > d
cd ../..
du test -ab
最後の行(du
を実行)の出力は次のとおりです。
2 test/a
4096 test/c
2 test/b
8196 test
ディレクトリのサイズは8196です(6ではなく、ファイルaのサイズ+ファイルbのサイズ+ファイルc/dのサイズ)。これは、私が理解しているように、duにはディレクトリ自体のサイズが含まれているためです(ディレクトリは、ファイルエントリを記録する単なる特別なファイルであるため)。
私はそれを望んでいません。ディレクトリ内のすべてのファイルの合計サイズを確認したい(Windowsエクスプローラーがディレクトリサイズを報告する方法)。したがって、この例では、結果は次のようになります。
2 test/a
2 test/c
2 test/b
6 test
さらに重要なことに、私が本当に必要としているのは、その最後の行、つまりディレクトリ内のすべてのファイルのサイズの合計(再帰的)です。
しかし、私はduのすべてのオプションを試しましたが、これを行う方法はないようです。方法はありますか?
$ ls -goR | awk '{sum += $3} END{print sum}'
16992
編集します。ディレクトリを除外するには、grep
を使用します
$ ls -goR | grep -v ^d | awk '{sum += $3} END{print sum}'
6
ディレクトリが占めるスペースを除いて、ファイルのサイズだけが必要な場合は、次のようなことができます。
$ find test/ -type f -print0 | xargs -0 du -scb | awk '/total/{k+=$1}END{print k" total"}'
6 total
ディレクトリ内のファイルの要約が必要であることを指定しましたが、出力例には特定のファイルが含まれています。
特定のファイルを含む詳細については、これを試してください。
$ find test/ -exec du -s {} \;
20 test/
4 test/b
4 test/a
8 test/c
4 test/c/d
各ディレクトリの概要については、次のことを試してください。
$ find test/ -type d -exec du -s {} \;
20 test/
8 test/c
うまくいけば、それはあなたの助けになるでしょうか?