ハードリンクを無視してフォルダーサイズを取得する方法


16

バックアップにはrsnapshotを使用します。これは、同じ名前のファイルを含む一連のフォルダーを生成します。一部のファイルはハードリンクされていますが、他のファイルは個別です。たとえば、hourly.1/file1hourly.2/file1は同じファイルにハードリンクされている場合がありますが、hourly.1/file2hourly.2/file2は完全に別のファイルです。

のファイルへのハードリンクであるファイルをhourly.2 無視して、フォルダーで使用されるスペースの量を見つけたいですhourly.1。そのため、上記の例では、file2のサイズを取得しますが、file1は無視します。

私はLinuxでbashを使用していますが、コマンドラインからできるだけ簡単にこれを実行したいので、大きなグラフィカルまたは他のOS専用のソリューションは必要ありません。

回答:


7

hourly.2リンクが1つしかないすべてのファイルの合計サイズ(バイト単位):

$ find ./hourly.2 -type f -links 1 -printf "%s\n" | awk '{s=s+$1} END {print s}'

findマンページから:

   -links n
          File has n links.

合計をバイトではなくキロバイトで取得するには、使用します -printf "%k\n"

異なるリンクカウントのファイルをリストするには、find -links +1(複数のリンク)、find -links -5(5つ未満のリンク)などで遊んでください。


1
ファイルがのファイルにハードリンクされているhourly2場合、コマンドは間違った答えを処理します。
cuonglm 14年

@Gnouc-ええ、はい-ファイルがで終わる方法に依存しますhourly.2。それらがそこにコピーされている場合、追加のリンクはなく、私のコマンドは機能します。ハードリンクされている場合、明らかに失敗します。新しいバックアップファイルがコピーされると仮定しています。
グレブネケ14年

11

特に下に存在するhourly.2が下には存在しないファイルのサイズが必要な場合は、でhourly.1間接的に取得できますdudu同じファイルを複数回処理する場合(異なる名前、つまりハードリンクの下でも)、最初のファイルのみがカウントされます。したがって、du hourly.1 hourly.2レポートするのhourly.2は探しているサイズです。したがって:

du -ks hourly.1 hourly.2 | sed -n '2s/[^0-9]*//p'

(POSIXシステムおよび他のほとんどのUnixバリアントで動作します。ディレクトリ名にhourly.1改行が含まれていないと仮定します。)


何らかの奇妙な理由で、duはRHEL5上のハードリンクファイルに常に気づかない-「du -sh dir / sub dir」を実行すると、dirの出力は「du -sh dir」と言った場合と同じになります-サイズを除外しません'dir / sub'の。
アンドレアスクレイ

8

@Gillesが言うように、du遭遇するのと同じiノードを指すすべてのハードリンクの最初のものだけをカウントするので、それにディレクトリを連続して与えることができます:

$ du -hc --max-depth=0 dirA dirB
29G /hourly.1
 1G /hourly.2
30G total

すなわち、「hourly.1」ですでに参照されているiノード(別名「実際の」ファイル)を参照する「hourly.2」のファイルはカウントされません。


2
よるデュ--help、オプション--max-深さ= 0と等価である-s:ので、上記のように短くすることができ、$ du -hcs dirA dirB
akavel


1

よりシンプル

du -hc --max-depth=1 path/

9.4G    daily/users/rockspa/home/daily.21
3.6G    daily/users/rockspa/home/daily.30
4.2G    daily/users/rockspa/home/daily.11
1.1G    daily/users/rockspa/home/daily.4
4.2G    daily/users/rockspa/home/daily.9
3.0G    daily/users/rockspa/home/daily.25
3.5G    daily/users/rockspa/home/daily.20
4.2G    daily/users/rockspa/home/daily.13
913M    daily/users/rockspa/home/daily.5
2.8G    daily/users/rockspa/home/daily.26
1.4G    daily/users/rockspa/home/daily.1
2.6G    daily/users/rockspa/home/daily.28
4.2G    daily/users/rockspa/home/daily.15
3.8G    daily/users/rockspa/home/daily.19
327M    daily/users/rockspa/home/daily.8
4.2G    daily/users/rockspa/home/daily.17
3.1G    daily/users/rockspa/home/daily.23
...

アブデルありがとう。これは受け入れられた答えでなければなりません。
TiberiusKirk
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.