以前、 の結果を並べ替えることを検討しましたが、などの結果du
の提案しか表示されませんでした。sort
du | sort
これはほとんどの用途では許容されますが、ハードリンクを持つ複数のディレクトリをリストするときには特に役に立ちません。たとえば、増分バックアップがあります:
ハードリンクを二重にカウントすると、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