web-dev-qa-db-ja.com

「du」と「tree」の最高のものを組み合わせる

「du」の正直さと「tree」のインデントされたフォーマットを組み合わせることができるかどうか疑問に思っています。ディレクトリのサイズのリストが必要な場合:

du -hx -d2

... 2レベルの深さを表示し、すべてのサイズの要約は正直ですが、サブディレクトリのインデントはありません。一方:

tree --du -shaC -L 2

...インデントと色分けがうまく行われますが、報告されたサイズは嘘です。実際のサイズを取得するには、次のことを行う必要があります。

tree --du -shaC

...つまり、「ツリー」にディレクトリ構造全体を表示させた場合にのみ、実際のサイズが得られます。実際に表示するサブディレクトリのレベルの数に関係なく、常に正しいサイズの要約を表示できるようにしたいと思います。私はよくこれをします:

tree -du -shaC | grep "\[01;34m"

...ディレクトリ以外のすべてを削除し、それらを適切にインデントします...しかし、表示を特定の数値レベルだけに制限する簡単な方法はありません(要約はありません)。方法はありますか?おそらく私は正しいスイッチを逃しました...

22
Ray Andrews

また、チェックアウトncduhttp://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ベースのクローン。

9
David Potočnik

色コードを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/
12
cas

dutree を使用できます

enter image description here

  • lS_COLORS環境変数に応じた色付きの出力。
  • ファイルシステムツリーを表示する
  • 小さなファイルを集約する機能
  • ファイルまたはディレクトリを除外する機能
  • 異なるディレクトリを比較する機能
  • 高速、Rustで記述
3
nachoparker

これを行うための完璧なコマンドツールはありませんが、次の2つの方法があります。

  • フォルダとファイルの両方のサイズが表示されますが、ツリーモードでは表示されません。

    du -ah --max-depth=1 /var/log

  • ツリーモードで表示されますが、ファイルのサイズのみが表示され、フォルダはカウントされます

    tree -ah /var/log -L 1

1
Valiant Jiang

Casに触発されて、私は今これをやっています:

treee ()
{
    integer levels=$(( ($1 + 1) * 4 ))
    tree --du -shaC | grep "\[01;34m" | grep -Ev "^[^\[]{$levels}\[*"
    du -sh .
}
0
Ray Andrews