Ubuntu

ls 和 du 關於文件大小的分歧,相差幾個數量級

  • January 11, 2022

有誰明白我為什麼會得到這些結果?請注意以下兩個命令之間的文件大小差異:

$ ls -lh gauss_landmarks_0000.npy 
-rw-rw-r-- 1 dparks dparks 1.1G Aug 16 12:43 gauss_landmarks_0000.npy

$ du -h gauss_landmarks_0000.npy 
20M     gauss_landmarks_0000.npy

這發生在如下所示的機器上:

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 16.04.3 LTS
Release:        16.04
Codename:       xenial

我自己的 linux mint 筆記型電腦上的結果按預期顯示:

$ lsb_release -a
No LSB modules are available.
Distributor ID: LinuxMint
Description:    Linux Mint 18.3 Sylvia
Release:        18.3
Codename:       sylvia

它可能是一個稀疏文件。這意味著並非所有塊都已分配,並且文件使用的空間比文件大小建議的要少得多。在讀取時,失去的塊將讀取為零。

您也可以使用-s選項來ls查看分配的大小,它應該與報告的大小相同du

編輯

如果您知道或懷疑一個文件包含許多零字節但不是稀疏的,則可以使用cp --sparse=always使其稀疏,從而可能節省大量磁碟空間。

cp --sparse=always -p file new_file

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