du 文件夹的大小

Ste*_*nio 4 linux filesystems bash files

我已经使用rsync包括符号链接、硬链接、权限、删除目标文件等方式复制了一个文件夹。它们应该非常相同。

一个文件夹位于 USB 驱动器上,另一个位于本地磁盘上。

如果我运行:du -bls在两个文件夹上,大小会略有不同。

我的du支持--apparent-size和它被应用-s并且-l应该计算硬链接的内容。

如何解释这种差异以及如何获得实际总数?

两个文件系统都是ext4,唯一的区别是U盘是加密的。

编辑:

我挖了下来找到了实际上不同的文件夹,我找到了一个,内容并不特别(没有块设备,没有管道,没有硬或符号链接,没有零字节文件),特殊之处可能是其中有几个小文件. 区别在于此特定文件夹的 872830 与 881022。

我也在du -blsc两个文件夹中运行,在这种情况下结果是相同的。

我使用的命令的一些额外细节:

$ du -Pbsl $LOCALDIR $USBDIR | cut -f1
872830
881022

$ du -Pbslc $LOCALDIR/*
[...]
868734  total

$ du -Pbslc $USBDIR/*
[...]
868734  total

$ ls -la $USBDIR | wc
    158    1415    9123
$ ls -la $LOCALDIR | wc
    158    1415    9123

$ diff -sqr --no-dereference $LOCALDIR $USBDIR | grep -v identical
[No output and all identical if I remove the grep]
Run Code Online (Sandbox Code Playgroud)

Kus*_*nda 11

由于您使用 复制了文件rsync,然后使用比较了两组文件diff,并且由于diff报告没有差异,因此两组文件是相同的。

大小差异可能可以通过两个目录结构中实际目录节点的大小来解释。在某些文件系统上,如果删除文件或子目录,目录不会被截断,从而留下比实际需要的目录节点稍大的目录节点。

如果您在某个时候保留了许多后来被删除的文件,这可能会留下大的目录节点。

例子:

$ mkdir dir
$ ls -ld dir
drwxr-xr-x  2 kk  wheel  512 May 11 17:09 dir
Run Code Online (Sandbox Code Playgroud)
$ touch dir/file-{1..1000}
$ ls -ld dir
drwxr-xr-x  2 kk  wheel  20480 May 11 17:09 dir
Run Code Online (Sandbox Code Playgroud)
$ rm dir/*
$ ls -ld dir
drwxr-xr-x  2 kk  wheel  20480 May 11 17:09 dir
$ du -h .
20.0K   ./dir
42.0K   .
$ ls -R
dir

./dir:
Run Code Online (Sandbox Code Playgroud)

请注意,即使我删除了我创建的 1000 个文件,该dir目录仍然使用 20 KB。