Files

如何獲得忽略硬連結的文件夾大小?

  • September 27, 2018

我使用 rsnapshot 進行備份,它會生成一系列包含同名文件的文件夾。一些文件是硬連結的,而另一些文件是獨立的。例如,hourly.1/file1hourly.2/file1可能硬連結到同一個文件,而hourly.1/file2hourly.2/file2是完全獨立的文件。

我想查找文件夾使用的空間量,hourly.2 忽略任何硬連結到hourly.1. 所以在上面的例子中,我想得到file2的大小,但忽略file1。

我在 linux 上使用 bash,我想盡可能簡單地從命令行執行此操作,所以請不要使用大的圖形或僅其他作業系統的解決方案。

hourly.2如果您特別想要在下面但不在下面的文件的大小hourly.1,您可以使用du. 如果du多次處理同一個文件(即使使用不同的名稱,即硬連結),它只計算第一次的文件。所以du hourly.1 hourly.2報告的hourly.2是你正在尋找的大小。因此:

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

(適用於任何 POSIX 系統和大多數其他 Unix 變體。假設目錄名稱hourly.1不包含任何換行符。)

正如@Gilles 所說,由於du只計算指向它遇到的同一 inode 的所有硬連結中的第一個,因此您可以連續給它目錄:

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

即,‘hourly.2’ 中的任何文件引用已經在’hourly.1’ 中引用的inode(又名“真實”文件),將不被計算在內。

引用自:https://unix.stackexchange.com/questions/118203