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


21

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

du -hx -d2

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

tree --du -shaC -L 2

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

tree --du -shaC

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

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

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

回答:


8

ncduもチェックアウトしますhttp : //dev.yorhel.nl/ncdu

そのページには、他の「類似プロジェクト」もリストされています。

gt5-ncduとかなり似ていますが、アプローチが異なります。

tdu-もう1つの小さなncursesベースのディスク使用量視覚化ユーティリティ。

TreeSize-GTK、ツリービューを使用。

バオバブ-GTK、円グラフ、ツリービュー、ツリーマップを使用。GNOMEが付属しています。

GdMap-GTK、ツリーマップ表示付き。

Filelight-KDE、円グラフを使用。

KDirStat-KDE、ツリーマップ表示。

QDiskUsage-円グラフを使用したQt。

xdiskusage-FLTK、ツリーマップ表示付き。

fsv-3Dビジュアライゼーション。

Philesight-FilelightのWebベースのクローン。


1
デイビッドに感謝、ついにそれらを見て回った。私はncduを選びました。
レイアンドリュース

@David tduはどこから来たのですか?
シャーリッシュ

@shirish上記の私のソースを参照してください
デビッドポトチュニク

11

カラーコードを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=...ラインは本当に必要ではありません。私はそれが1行に収まり、ここでワードラップしないことを確認するためにそのようにしましたU&L。正規表現は、直接tree | grep ...行に進むことができ、おそらくそうすべきです。

次のように実行します。

mytreedu 

または

mytreedu -L 2 /path/to/dir/

1
コードは大好きですが、「-d」を使用できないことを繰り返します。使用すると、サイズの概要が正しくないか、少なくともここにあるためです。サイズは常に「4096」として報告されます。これは、ディレクトリ自体のエントリのサイズですが、すべてのコンテンツのサイズではありません。
レイアンドリュース

...現在のディレクトリの下の各ディレクトリに対して '4096'と表示されているはずです...しかし、ファイルを含むディレクトリのサイズは取得できません。
レイアンドリューズ

あなた-Lは問題だとだけ言ったが、まったく言及-dしなかった。ここで、報告された数値をより詳しく調べます。tree --duまた、によってtree --du -d報告された数値とは決して似ていない報告サイズもありませんdu
cas

ポイントは、100%未満の表示では正しいサイズが得られないことです。「-d」または「-L 2」などを使用して制限することができます。表示されず、サイズにはカウントされません。
レイアンドリュース

tree --du有無にかかわらず、とにかくディレクトリの正しいサイズを与えるようには見えません-d-L。数字が何であるかはわかりませんが、どのduレポートとは無関係です。
cas

3

dutreeを使用できます

ここに画像の説明を入力してください

  • LS_COLORS環境変数に応じたカラー出力。
  • ファイルシステムツリーを表示する
  • 小さなファイルを集約する機能
  • ファイルまたはディレクトリを除外する機能
  • 異なるディレクトリを比較する機能
  • Rustで書かれた高速

1

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

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

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

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

    tree -ah /var/log -L 1


0

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

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

すべてのgetoptsのものを捨てる場合、少なくともの"$@"直後に必要-shaCです。それ以外の場合、その関数は現在のディレクトリのみで機能するようにハードコーディングされています。
cas

問題が解決したら、そのことについてお尋ねします。詳しく説明してください。もちろん「$ @」についてですが、これまでのところ現在のディレクトリでしか使用していませんので、まだ気づいていません。この「getopts」はすべて私にとって新しいものです。私はあなたがそこで何を考えているのか知りたいです。
レイアンドリュース

使用する利点の1つは、getoptsコマンドラインでオプションを任意の順序で表示できることです。mytree私が書いた関数の最初のバージョンは、あなたのものと同じように「$ 1」を使用したため、深度引数最初の引数でなければならず、オプションではありませんでした。私はそれが十分ではないと判断したので、bash-builtin getoptsを使用して-Lオプションを処理しました。これにより、-L nオプションをコマンドラインのどこにでも表示できます。また、完全にオプションにすることもできました。
cas

別の見方ではgetopts、システム上の他のほとんどのプログラムと同様に、($ 1 $ 2 $ 3などのハードコードされた位置の引数だけでなく)実際のオプションと引数を取るスクリプトを作成できます。また、パッケージからgetoptプログラムを使用する場合(のないことに注意してください)、GNUプログラムと同様に、短い1文字のオプション(例)と長いオプション(例)の両方を使用できます。sutil-linux-l--long
cas

ああ...それは今私に戻ってきます。はい、実際に一度使用しました。もう一度見てください。ありがとう。
レイアンドリュース
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.