同じデバイス上でサブディレクトリをバインドマウントせずにディレクトリサイズを計算します。

同じデバイス上でサブディレクトリをバインドマウントせずにディレクトリサイズを計算します。

ディレクトリとすべてのサブディレクトリのサイズを計算したいと思います。しかし、マウントポイントからマウントされるいくつかのサブディレクトリを作成しました。 (使用mount -B/--bind

du -hks返されたサイズを使用すると、マウントされたディレクトリが含まれます。結果からサイズを削除する方法はありますか?

編集する: サイズを計算するディレクトリはすべて同じ場所にあります。他のすべてのディレクトリ(すべてのマウントポイントを含む)の共有コンテンツを含むデフォルトのディレクトリがあり、ディレクトリには別々のファイルがあります。目標は、単一ファイルのサイズを計算することです。

答え1

餃子:

   -x, --one-file-system
          skip directories on different file systems

答え2

du -x(少なくともGNUとbusybox du)ファイルのデバイスIDが同じであるため、Linuxバインドマウントに属するため、マウントポイントを手動でクリーンアップする必要があります。 GNUの使用du:

du -xhs --exclude=./bind/mount/point

あるいは、GNUを使用してfindファイルを見つけてディスク使用量を印刷し、コマンドを呼び出してクリーンアップするmountpointディレクトリを知ることもできます(これはバインドマウントです)。次に、それを使用してawk合計を計算します(duこのようにハードリンクを一度だけ計算します)。

find . -xdev ! -name . -type d -exec mountpoint -q {} \; -prune -o \
       -printf '%i %b\n' |
  awk '!seen[$1]++ {s+=$2}
       END{printf "%.17g\n", s * 512}' |
  numfmt --to=iec

ただし、これはmountpoint各ディレクトリに対してコマンドを実行する必要があるため、非常に非効率的です(ディレクトリ以外のファイルをバインドすることも可能であり、mountpoint各ファイルで実行されるのを避けるためにこれは行われないと仮定します)。

関連情報