web-dev-qa-db-ja.com

ファイルのサイズのみを含むディレクトリサイズを(再帰的に)報告するようにduに強制する方法はありますか?

ディレクトリを作成するとしますtest/、2つのファイル(test/atest/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のすべてのオプションを試しましたが、これを行う方法はないようです。方法はありますか?

3
Kipras
$ ls -goR | awk '{sum += $3} END{print sum}'
16992

編集します。ディレクトリを除外するには、grepを使用します

$ ls -goR | grep -v ^d | awk '{sum += $3} END{print sum}'
6
1
RedGrittyBrick

ディレクトリが占めるスペースを除いて、ファイルのサイズだけが必要な場合は、次のようなことができます。

$ find test/ -type f -print0 | xargs -0 du -scb | awk '/total/{k+=$1}END{print k" total"}'
6   total
2
terdon

ディレクトリ内のファイルの要約が必要であることを指定しましたが、出力例には特定のファイルが含まれています。

特定のファイルを含む詳細については、これを試してください。

$ 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

うまくいけば、それはあなたの助けになるでしょうか?

0
Bryan