Shell

查找某組文件的大小

  • March 9, 2019

我試圖找出特定使用者擁有的所有文件的總大小。

在嘗試這樣做時,我在執行不同的命令時會得到不同的大小。

哪個命令可以正確找出特定使用者擁有的所有文件的總大小?

$ find . -type f -user silviya|ls -lh|head -1 
total 68K
$ find . -type f -user agalya|wc -c
284
$ find . -type f -user agalya|du -sk
120 .

這種變化的原因是什麼?

在:

find . -type f -user silviya|ls -lh|head -1 

您正在通過管道輸出findto ls,但ls不讀取其輸入。它將文件列表作為參數列出。在沒有像這裡這樣的參數的情況下,它會列出目前目錄中的非隱藏文件。因此,在這裡,您可以獲得目前目錄中所有非隱藏文件(任何類型)的磁碟使用情況(每個硬連結計算給定文件的大小)。

在:

find . -type f -user agalya|wc -c

您正在計算 輸出中的字節數find,因此這是文件路徑(和換行符)的大小,而不是它們的磁碟使用量或文件大小。

在:

find . -type f -user agalya|du -sk

Like lsdu將文件列表作為參數,而不是來自其輸入。因此,在這裡,您可以獲得目前目錄中所有文件和目錄的磁碟使用情況(遞歸)。

要使用agalyaGNU 實用程序獲取 擁有的所有正常文件的磁碟使用情況,您可以:

find . -type f -user agalya -print0 | du -hc --files0-from=- | tail -n 1

--files0-from告訴du(僅限 GNU du)從標準輸入中獲取文件列表(由-此處表示)。-c給出累積大小(請注意,同一文件的硬連結只計算一次)。

要獲得文件表觀大小而不是磁碟使用情況,請添加--apparent-size選項到du(同樣,GNU 特定)。添加-l選項(也是 GNU 特定的)以多次計算硬連結。

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