他の場所にハードリンクされていないファイルが使用するスペースだけを「du」する方法は?

他の場所にハードリンクされていないファイルが使用するスペースだけを「du」する方法は?

rsync --link-dest省スペースのためのスナップショット実際にどのくらいのスペースを節約するのか、どうすればわかりますか?またはより一般的に:

他の場所にハードリンクされていないファイルのみを考慮してディレクトリが使用するスペースを計算する方法外部ディレクトリ構造?別の方法で質問します。このディレクトリを削除すると、実際にどのくらいのスペースが確保されますか? (du -hsおそらく嘘です。ハードリンク自体に必要なスペースを含めることができます)

ベストアンサー1

内部ハードリンクがないと仮定すると(つまり、2つ以上のハードリンクを持つすべてのファイルがツリー外でリンクされている場合)、次のことができます。

find . -links -2 -print0 | du -c --files0-from=-

編集するこれが私がレビューで説明して適用したものです。いいえ。これが必要ではないduことに気付いた@StephaneChazelasに感謝します。du最後に説明。

( find . -type d -printf '%k + ' ; \
  find . \! -type d -printf '%n\t%i\t%k\n' | \
    sort | uniq -c                         | \
    awk '$1 >= $2 { print $4 " +\\" }' ; \
  echo 0 ) | bc

私たちが望むのは、プラス記号で区切られた各関連ファイルのディスク使用量(KB)を含む文字列を作成することです。その後、私たちはこの大きなサプリメントをbc

最初のfind呼び出しでは、ディレクトリに対してこれを行います。

2 番目は、findリンク数、inode、およびディスク使用量を印刷します。sort | uniq -cリスト(ツリーの発生回数、リンク数、inode、ディスク使用量)を取得するためにこのリストを渡します。

私たちは渡すそれ最初のフィールド(発生回数)がawk2番目のフィールド(ハードリンク数)以上である場合、つまりツリーの外側にファイルへのリンクがないことを意味し、4番目のフィールド(ディスク使用法)はプラス記号とバックスラッシュで印刷します。になります。

最後に a を出力するので、0数式が構文上正しいので(そうでなければ en となります+)、それを に渡しますbc

(しかし、十分な答えを得ることができれば、より簡単な最初のアプローチを使用します。)

おすすめ記事