「du」の正直さと「tree」のインデントされたフォーマットを組み合わせることができるかどうか疑問に思っています。ディレクトリのサイズのリストが必要な場合:
du -hx -d2
... 2レベルの深さを表示し、すべてのサイズの要約は正直ですが、サブディレクトリのインデントはありません。一方:
tree --du -shaC -L 2
...インデントと色分けがうまく行われますが、報告されたサイズは嘘です。実際のサイズを取得するには、次のことを行う必要があります。
tree --du -shaC
...つまり、「ツリー」にディレクトリ構造全体を表示させた場合にのみ、実際のサイズが得られます。実際に表示するサブディレクトリのレベルの数に関係なく、常に正しいサイズの要約を表示できるようにしたいと思います。私はよくこれをします:
tree -du -shaC | grep "\[01;34m"
...ディレクトリ以外のすべてを削除し、それらを適切にインデントします...しかし、表示を特定の数値レベルだけに制限する簡単な方法はありません(要約はありません)。方法はありますか?おそらく私は正しいスイッチを逃しました...
また、チェックアウトncdu: http://dev.yorhel.nl/ncd
そのページには、他の「類似プロジェクト」もリストされています。
gt5-ncduとかなり似ていますが、アプローチが異なります。
tdu-別の小さなncursesベースのディスク使用状況視覚化ユーティリティ。
TreeSize-ツリービューを使用したGTK。
Baobab-GTK、円グラフ、ツリービュー、ツリーマップを使用。 GNOMEが付属しています。
GdMap-GTK、ツリーマップ表示付き。
Filelight-円グラフを使用したKDE。
KDirStat-KDE、ツリーマップ表示付き。
QDiskUsage-円グラフを使用したQt。
xdiskusage-FLTK、ツリーマップ表示付き。
fsv-3D視覚化。
Philesight-FilelightのWebベースのクローン。
色コードをgrepする必要はありません。-d
オプションはlist directories only
です。
これはあなたが望むことをするようです:
$ tree --du -d -shaC | grep -Ev '( *[^ ]* ){2}\['
.
├── [ 18] dir1
├── [ 30] dir2
├── [ 205] junk
│ ├── [ 18] dir1
│ ├── [ 30] dir2
│ └── [ 76] dir3
├── [ 119] merge
└── [ 20] stuff
4.4K used in 10 directories
grep
コマンドは、(1つ以上のスペースの後に非スペースの後にスペースが続く)2回、その後に[
が続くすべての行を削除します。
深さを1にする場合は、{}中括弧内のバインドカウントを{1}
ではなく{2}
に変更します。深さ3が必要な場合も同様に、それを{3}
に変更します。
次のように、これをシェル関数に変換できます。
mytreedu() {
local depth=''
while getopts "L:" opt ; do
case "$opt" in
L) depth="$OPTARG" ;;
esac
done
shift "$((OPTIND-1))"
if [ -z "$depth" ] ; then
tree --du -d -shaC "$@"
else
local PATTERN='( *[^ ]* ){'"$depth"'}\['
tree --du -d -shaC "$@" | grep -Ev "$PATTERN"
fi
}
これは、getopts
を使用して、-L
オプションとその引数をtree
コマンドラインから「盗み取り」ます。コマンドラインに-L n
オプションがない場合も機能します。
他のすべてのオプションと引数は、tree
コマンドに渡されます。
local PATTERN=...
行は実際には必要ありません。 U&L
では、1行に収まり、ここでワードラップしないようにするために、そのようにしました。正規表現はtree | grep ...
行に直接行くことができますし、おそらくそうすべきです。
次のように実行します。
mytreedu
または
mytreedu -L 2 /path/to/dir/
dutree を使用できます
これを行うための完璧なコマンドツールはありませんが、次の2つの方法があります。
フォルダとファイルの両方のサイズが表示されますが、ツリーモードでは表示されません。
du -ah --max-depth=1 /var/log
ツリーモードで表示されますが、ファイルのサイズのみが表示され、フォルダはカウントされます
tree -ah /var/log -L 1
Casに触発されて、私は今これをやっています:
treee ()
{
integer levels=$(( ($1 + 1) * 4 ))
tree --du -shaC | grep "\[01;34m" | grep -Ev "^[^\[]{$levels}\[*"
du -sh .
}