在尝试验证复制操作是否成功完成(或者至少没有跳过任何文件)时,我运行了du -b
源目录和目标目录,结果显示差异约为 100KB。
因此,我追踪了差异并找到了一个(众多)叶目录,其中du
报告了副本和原始文件的总大小差异。
奇怪的是,ls -l
显示这些目录完全相同!
以下是两个不同目录中的两个输出:
root@...:/local/.../DCIM/100___12# du -b
5286222389 .
root@...:/local/.../DCIM/100___12# ls -l --block-size=1
total 5292851200
-rwxr--r-- 1 markus markus 2167504 Aug 5 2013 IMG_0004.JPG
-rwxr--r-- 1 markus markus 2236594 Aug 5 2013 IMG_0005.JPG
...
对阵
root@...:/local_old/.../DCIM/100___12# du -b
5286226485 .
root@...:/local_old/.../DCIM/100___12# ls -l --block-size=1
total 5292851200
-rwxr--r-- 1 markus markus 2167504 Aug 5 2013 IMG_0004.JPG
-rwxr--r-- 1 markus markus 2236594 Aug 5 2013 IMG_0005.JPG
...
请注意,报告的大小du -b
小于报告的大小ls -l
,并且两个目录的大小不同。全部的两个目录的输出ls -l
相同。
此目录中没有符号链接或系统文件。它只是一堆 .jpg 文件(直接从相机的 SD 卡复制)和 Windows 为它们创建的 Thumbs.db 文件(通过 samba)...
我是否遗漏了有关这些命令应如何工作的某些信息?
(我正在运行 Debian Wheezy 并uname -a
输出Linux ... 3.2.0-4-amd64 #1 SMP Debian 3.2.63-2+deb7u1 x86_64 GNU/Linux
)
答案1
两者都正确。
- ls显示文件的确切字节
- 杜显示磁盘使用情况,这是不同的,因为系统使用块存储文件。
您可以使用以下命令找到文件系统正在使用的块大小:
blockdev --getbsz <partition>
例如:
blockdev --getbsz /dev/sda1
答案2
-a
将开关添加到后ls
,我得到:
root@...:/local/.../DCIM/100___12# du -b
5286222389 .
root@...:/local/.../DCIM/100___12# ls -al --block-size=1
total 5292867584
drwxr-xr-x 2 markus markus 12288 Aug 5 2013 .
drwxr-xr-x 4 markus markus 4096 Aug 5 2013 ..
-rwxr--r-- 1 markus markus 2167504 Aug 5 2013 IMG_0004.JPG
...
对阵
root@...:/local_old/.../DCIM/100___12# du -b
5286226485 .
root@...:/local_old/.../DCIM/100___12# ls -als --block-size=1
total 5292871680
drwxr-xr-x 2 markus markus 16384 Aug 5 2013 .
drwxr-xr-x 4 markus markus 4096 Aug 5 2013 ..
-rwxr--r-- 1 markus markus 2167504 Aug 5 2013 IMG_0004.JPG
...
注意 -directory 大小的差异.
,它恰好弥补了 报告的差异du -b
。
此外,似乎全部的报告的单位ls
实际上是块而不是字节。所以答案是@jcbermu建议,但倒退了:
是的,两者都正确,但ls
报告全部的使用的 fs 块的大小(但单个文件的大小以字节为单位)并du -b
报告字节。
我看到的源和目标之间的差异是由 报告的大小差异引起的.
。这从何而来,又是另一个故事。可能是因为一个在某个时候比另一个保留了更多的目录条目。但至少现在我不再担心在复制过程中遗漏了什么。下一步是弄清楚如何告诉du
忽略.
其..
总数,这应该可以解决我的问题。