为什么用 cp 命令复制的目录比原来的小

Why directory copied with cp command has less size than the original one

我想将一个包含大量文件的目录复制到另一个目的地。我做到了

cp -r src_dir another_destination/

然后我想确认目标目录的大小是否与原始目录相同:

du -s src_dir
3782288 src_dir

du -s another_destination/src_dir
3502320 another_destination/src_dir

然后我想到可能有几个符号链接后面没有cp命令并添加了-a标志:

-a Same as -pPR options. Preserves structure and attributes of files but not directory structure.

cp -a src_dir another_destination/

du -s 给了我相同的结果。有趣的是,源和目标都有相同数量的文件和目录:

tree src_dir | wc -l
    4293

tree another_destination/src_dir | wc -l
    4293

我在使用 du 命令得到不同尺寸时做错了什么?

这可能有多种原因,因为您询问的是已用磁盘大小,而不是两棵树中存储的字节数。

  • 在文件系统中,文件以特定的开销存储。此开销取决于文件系统。也许这两个存储使用不同的文件系统,这些文件系统效率不一样(例如使用不同的块大小,这可能是由于不同的磁盘大小)。
  • 另一个原因可能是原始文件中的硬链接文件。该副本可能已多次复制硬链接文件,因此在副本中它们不再是硬链接。
  • 第三个原因可能是包含大面积零字节的稀疏文件,在某些文件系统中可以通过不分配块来有效地存储这些文件。

为了至少排除第一个原因(最有可能的一个),我建议在两棵树上都使用 du -bs