使用 Windows 7 Professional 64 位...
使用批处理文件和 RoboCopy.exe 来复制
4 个文件和 2 个目录从
c:\temp = SDD(固态硬盘)到
r:\temp = USB 记忆棒(闪存驱动器),命令如下:
“C:\WINDOWS\system32\ROBOCOPY.EXE” “D:\TEMP” “R:\TEMP” /V /TEE /S /E /COPY:DAT /DCOPY:T /NP /XJ /R:1000000 /W:30 /LOG:r:\RoboCopyInfo.LOG
问题:为什么
diff.exe 通过 RoboCopy 看到上述复制命令的结果为正常,没有错误,但是
du.exe 对文本文件却看到了差异?
“C:\Program Files\Gow\bin\DIFF.exe”-q -r“D:\TEMP”“R:\TEMP”
::DIFF.exe = diff(GNU diffutils)2.8.7 https://github.com/bmatzelle/gow/releases
:: -q = 仅输出文件是否不同。
:: -r = 递归比较找到的任何子目录。
::“D:\TEMP”=SDD(固态硬盘)上的源文件。
::“R:\TEMP”= 目标驱动器是 HDD 或 USB 记忆棒(闪存驱动器),用适当的字母替换 R。
:: 如果输入相同,则 DIFF.exe 退出状态为 0;如果不同,则退出状态为 1;如果有问题,则退出状态为 2。
但是,du.exe 将文本文件视为上述不同的批处理文件:
d:
光盘\
光盘温度
“C:\Program Files\Gow\bin\du.exe”-a -b -c -P -S -x >r:\DU_d_TEMP.txt
r:
光盘\
光盘温度
“C:\Program Files\Gow\bin\du.exe”-a -b -c -P -S -x >r:\DU_r_TEMP.txt
:: du.exe = 磁盘使用情况 (GNU coreutils) 5.3.0 https://github.com/bmatzelle/gow/releases
::“D:\TEMP”=SDD(固态硬盘)上的源文件。
::“R:\TEMP”= 目标驱动器是 HDD 或 USB 记忆棒(闪存驱动器),用适当的字母替换 R。
:: -a = 对所有文件进行写入计数,而不仅仅是目录
:: -b = 字节,相当于 `--apparent-size --block-size=1'
:: -c = 总计,产生总计
:: -P = --no-dereference,不遵循任何符号链接(这是默认值)
:: -S = --separate-dirs,不包括子目录的大小
::-x=--one-file-system 跳过不同文件系统上的目录
DU_d_TEMP.txt
908 ./cicon9.gif
18855 ./帮助/HTML/使用情况.htm
27047 ./帮助/HTML
0./帮助
297./输出 1.log
52876./Q.EXE
58177。
共 85224 个
DU_r_TEMP.txt
908 ./cicon9.gif
297./输出 1.log
52876./Q.EXE
18855 ./帮助/HTML/使用情况.htm
18855 ./帮助/HTML
0./帮助
54081。
共 72936 个
du.exe 文本文件发现
12288 字节 (85224 - 72936)
问题:为什么
diff.exe 通过 RoboCopy 看到上述复制命令的结果为正常,没有错误,但是
du.exe 对文本文件却看到了差异?
--
答案1
我有点犹豫是否要把这个作为答案,但它有几个可能的解释。我不熟悉 du 或 diff,但我假设 diff 比较文件并报告差异,而 du 报告所有文件和目录的文件和目录大小。通过查看 du 结果文件来总结复制的文件:
- 总共四个文件;2 个子目录加上根目录 (
.
) - 根目录下有三个文件(
.
)总计54081字节。DU_d_TEMP.txt 报告58177字节,相差4096字节。 - /Help 目录中没有直接的文件
- /Help/HTML 目录下的一个文件总计18855字节。但是,DU_d_TEMP.txt 报告27047/Help/HTML 中的字节数,差异为8192字节。
解释 1:D: 上有系统/隐藏文件或连接点,Robocopy 要么忽略要么无法复制。可能在不同的文件系统上?(想知道为什么-X旗帜在 du 上使用)这是不太可能,因为 Robocopy 在选择要复制的文件时会忽略大多数源文件属性。但是,如果它选择了要复制的文件,但无法复制,则可能的du 和 diff 可能会忽略系统/隐藏文件本身,但 du 检测到该目录中的空间已被使用。由于不知道完整的设置、文件系统、连接的驱动器/机器等,也看不到 Robocopy 日志文件,我暂时不能排除这种可能性。例如,请参阅这个答案在 askubuntu 论坛上,关于 Windows 分区上的文件可以被 Ubuntu 看到,但不能被 Windows 看到。
解释 2:D: 上的文件系统存储文件的方式与 R: 上的文件系统不同。4096 字节是现代驱动器上的常见扇区大小,因此根目录 ( .
) 和 /Help/HTML/ 目录中的两个较大文件(相对于 1KB 以下的文件)可能有一个额外的扇区(4096字节)或两个(8192分配给未使用文件的字节数。
我并不是说只有这两种解释,但这两种解释可能的解释。如果你还有,发布 Robocopy 日志文件可能排除解释1。