Thunar で「再帰的な」ファイル サイズを表示する方法はありますか?

Thunar で「再帰的な」ファイル サイズを表示する方法はありますか?

私は Thunar 1.6.3 を使用していますが、現在、一連のフォルダーを見ると次のようになります。

Folder 1        8,2 kB
Folder 2        4,1 kB
Folder 3        4,1 kB
Folder 4        0   kB

これらの「サイズ」の数字がどこから来ているのかはわかりませんが、フォルダー内のすべての実際のサイズを反映しているわけではないことは確かです。なぜなら、右クリックして「プロパティ」を選択すると、フォルダー (サイズはすべてキロバイト単位) の合計が 100 GB を超えるからです。

質問

  • Thunar では、12.04 と 14.04 の両方のコマンド ラインと同様に、なぜ 4K のようなフォルダー サイズが表示されるのでしょうか。この数字は何を意味していますか。
  • 代わりに、ターミナル、Thunar、またはその他のファイル マネージャーで、フォルダーとすべてのコンテンツの計算された再帰サイズである複合サイズを表示する方法はありますか? (注: シェル スクリプト ソリューションを探しているわけではありません)。

答え1

これを説明するには、Linux ファイル システムの構造について少し説明する必要があります。ほとんどの Linux ファイル システムは同様の動作をしますが、ここでは現在のデフォルトである ext4 を想定しています。

ファイルシステム構造

  • inode は、ファイル システムが論理単位として認識する基本ブロックです。
  • ディレクトリ inode には他の inode への参照が含まれます。
  • ファイルの inode には、メタデータ、実際のデータ、およびファイルを非連続的に格納する必要がある場合の継続ブロックへの参照が含まれます。

リンク

  • Ext4 は、ハードリンクとソフトリンクの 2 種類のリンクをサポートしています。
  • ハード リンクは、inode への直接参照です。各ファイルには、それが属するディレクトリからのハード リンクが少なくとも 1 つあります。
  • ディレクトリは単なる inode であり、inode 参照のグループに関する情報を持っているため、自分自身または親を参照できます。つまり、フォルダーは同じフォルダーの子と親の両方になることができます。

さて、これは混乱しているかもしれません。説明させてください。次のように A、B、C の 3 つのフォルダーがあるとします。

C is in B.  
B is in A.

ここで面白いのは、C が A と同じ inode を指すことができ、循環参照ループと呼ばれる状態を作り出すことです。再帰を試みると、終わりのないループに遭遇することになります。

  • ソフト リンクは、ターゲットの場所へのディレクトリ パスを記録する通常のファイルです。これらは、テキスト行ではなく、他の場所へのリンクとして解釈されるように、ファイル システム上でマークされるだけです。たとえば、Nautilus では、[リンクの作成]/[ここにリンク] オプションを使用すると、ソフト リンクが作成されます。

だから何?

したがって、サイズを再帰的に計算しようとすると、癖がつきます。デフォルトでサイズを再帰的に計算しようとするのはよくありません。ただし、私が知っているすべての適切なファイル マネージャーのプロパティ ダイアログには、再帰的に計算された合計サイズが表示されます。これは、一般ユーザーが期待していることだからです。

Windowsには問題ないですか?

実際、Windows は NTFS と呼ばれる別のファイル システム形式を使用しており、すべてのファイルとそのサイズのリストが保持されます。そのため、常に合計サイズを簡単に知ることができます。

では、なぜ NTFS を使用しないのでしょうか?

これは、Unix のパーミッションの概念 (所有者、グループ、およびユニバースを個別に) をサポートしていないためrwx、この理由だけで Linux ファイル システムとして使用するには適していません。Ext4 は多くの機能を備えているため、この小さな不便さは多くの人にとって問題になりません。

わかりました。必要なサイズを教えて。

試しましたかdu

どのようにdu機能しますか?

duディスク使用量を表します。実際には inode ブロックをカウントしますが、重複してカウントしないように注意します。サイズを合計すると、合計サイズが得られます。

要約

du -hs <foldername>ディスク上のフォルダーの実際のサイズを確認するために使用します。man du詳細については、こちらをお読みください。

答え2

トゥナールトップメニューから「編集」>「カスタムアクションの構成」に移動し、次の新しいカスタムアクションを追加します。

  1. 基本タブ: 任意の名前 [例: フォルダー - ファイル サイズ]、コマンドdu -h -c %N | grep total | zenity --text-info、またはdu -chs %N | zenity --text-info選択したフォルダーまたはファイルのサイズと合計サイズ。
  2. 出現条件タブ: すべてのボックスをチェックします。

この解決策はhttp://crunchbang.org

答え3

Thunar に特有のこのトピックに関するちょっとした豆知識は、Thunar は --apparent size オプションの有無にかかわらず、du とは異なるサイズを報告するということです。du に提供された回答が、その理由のヒントになると思います (おそらく、Thunar は実際にはこれらの同じものを少し異なる方法でカウントします)。例: 同じフォルダー: (x は書き留めなかった余りです) --apparent-size なしの du: 19.x GB --apparent-size ありの du:12.x GB Thunar 5.5x GB 括弧内の Thunar 値: 5.9x GB 最終的には、du の出力 (古いものなので) を採用すると思いますが、それでも興味深いものです。

関連情報