尋找某組文件的大小

尋找某組文件的大小

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

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

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

$ 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 .

造成這種變化的原因是什麼?

答案1

在:

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

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

在:

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

您正在計算 輸出中的位元組數find,因此這是檔案路徑(和換行符號分隔符號)的大小,而不是它們的磁碟使用情況或檔案大小。

在:

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

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

要使用 GNU 實用程式取得 擁有的所有常規檔案的磁碟使用情況agalya,您可以執行以下操作:

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

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

取得文件明顯的大小而不是磁碟使用情況,新增該--apparent-size選項du(同樣,GNU 特定)。新增-l選項(也是 GNU 特定的)來對硬連結進行多次計數。

答案2

指令 #1 給出檔案及其內容的「有用」位元組的總大小。

指令 #3 提供已使用磁碟空間來儲存檔案。磁碟被劃分為多個區塊(通常為 4 kB 長),這些區塊不能由多個檔案共用。因此,1 到 4096 B 之間的任何大小的檔案都將使用 4 kB 的磁碟空間,例如 [這是簡化的。在某些 FS 類型(例如 ext)上,非常小的檔案可以儲存到檔案表本身中,根本不使用資料區塊。

指令 #2 只是計算字元的數量檔案名稱。 (命令輸出的大小find。)

相關內容