du は、フォルダ名とはまったく異なる*とフォルダサイズを表示します。

du は、フォルダ名とはまったく異なる*とフォルダサイズを表示します。

一部のデータを移動しようとしていますが、まずデータのサイズが正しいことを確認したいと思います。ただし、次のようにフォルダを確認すると問題が発生します。

du -sh  myfolder/
780M    myfolder/

しかし、

du -sh *
..
71M     myfolder
..

隠しファイルに関連していると思いましたが、この特定のフォルダには何も含まれていません。

私は何を逃したことがありませんか?

答え1

myfolderアルファベット順にソートする前に、サブディレクトリに別のハードリンクを含む709MBファイルが含まれる可能性がありますmyfolder。このduコマンドは、各固有ファイルが最初に表示されたときにのみ報告されるため、ファイルにオーバーレイが実行されるツリー内に複数のリンクがある場合は、最初に移動されたディレクトリの下にdu一度だけ報告されます。

いくつかの方法でハードリンクを見つけることができます。

  • find myfolder -links +1 -type fmyfolder+1そのリンクの場所に関係なく(「複数」を意味します)、下に少なくとも2番目のハードリンクを持つすべてのファイルを一覧表示します。
  • find . -samefile myfolder/foomyfolder/foo(GNU findを使用)現在のディレクトリのすべてのハードリンクを一覧表示します。myfolder現在ディレクトリにあるので、自分も含まれますmyfolder/foo
  • find -type f -links +1 -printf '%i %p\n' | sort -k1n(GNU findを使用)現在のディレクトリにinode番号でグループ化されたハードリンクファイルのリストを作成します。 2つのファイルが同じファイルシステムにあり、同じinode番号を持つ場合、2つのファイルは同じです。

関連情報