du 再帰順序を変更する方法

du 再帰順序を変更する方法

前の結果を並べ替えた結果、次のような結果の提案のみをdu見ました。sortdu | sort

これはほとんどの目的に適していますが、ハードリンクを含む複数のディレクトリを一覧表示する場合は特に役立ちません。たとえば、増分バックアップがあります。

ハードリンクを2回計算すると、du内容は次のようになります。

# du -hl --max-depth 1 /backup/saturn/ | sort -k 2
3.2G    /backup/saturn/
456M    /backup/saturn/2017-05-19
458M    /backup/saturn/2017-05-20
461M    /backup/saturn/2017-05-21
464M    /backup/saturn/2017-05-22
462M    /backup/saturn/2017-05-23
462M    /backup/saturn/2017-05-24
465M    /backup/saturn/2017-05-25

ただし、各古いディレクトリは他のディレクトリファイルへの多くのハードリンクを共有するため、これらの結果は正しくありません。これは増分バックアップです。

しかし、より意味のある結果は次のとおりです。

# du -h --max-depth 1 /backup/saturn/ | sort -k 2
666M    /backup/saturn/
29M     /backup/saturn/2017-05-19
53M     /backup/saturn/2017-05-20
25M     /backup/saturn/2017-05-21
40M     /backup/saturn/2017-05-22
462M    /backup/saturn/2017-05-23
14M     /backup/saturn/2017-05-24
46M     /backup/saturn/2017-05-25

これはランダムな順序でディレクトリを評価するので、ある日から次の日までどれだけ変更されたかについての意味のある情報をほとんど提供しないため、少し面白いです。

duだから私はディレクトリが評価される順序を制御する方法を探しています。

ベストアンサー1

拡張リギのコメント、最新バージョンでは、duこのオプションを使用してスキャンするファイルのリストを読み取ることができるので、--files0-from次のことができます。

printf "%s\0" /backup/saturn/*/ | sort -z | du --files0-from=- -h --total

たとえば、

$ du -hxd1 foo
111M    foo/2017-05-20
4.0K    foo/2017-05-19
4.0K    foo/2017-05-30
111M    foo

そして:

$ printf "%s\0" foo/*/ | sort -z | du --files0-from=- -h --total
101M    foo/2017-05-19/
11M     foo/2017-05-20/
4.0K    foo/2017-05-30/
111M    total

findあまりにも多くのファイルをglobする必要がある場合は使用できますが、printf少し冗長です。

$ find foo -mindepth 1 -maxdepth 1 -type d -print0 | sort -z | du --files0-from=- -h --total
101M    foo/2017-05-19
11M     foo/2017-05-20
4.0K    foo/2017-05-30
111M    total

おすすめ記事