Windows操作系统下,下载对象时发现本地和云上对象数量不一致
如果发现下载后本地文件和文件夹数量之和小于云上对象数量(OBS不区分文件或文件夹,统称为对象),并且当前操作系统是Windows,这个是因为Windows文件系统将文件和目录名称视为不区分大小写,FOO.txt和foo.txt将被视为相同文件;但是在OBS中是区分大小写的,FOO.txt和foo.txt将被视为不同文件。
比如桶中存在以下对象(大小写不一致):
obsutil ls obs://test Start at 2024-01-17 01:33:37.6378193 +0000 UTC Listing objects . Folder list: obs://test/TEST/ obs://test/test/ Object list: key LastModified Size StorageClass ETag obs://test/TEST/FOO.txt 2024-01-17T01:33:21Z 493B standard "735b0ca5680bfa12d8895702662192ec" obs://test/test/foo.txt 2024-01-17T01:32:59Z 5B standard "5d41402abc4b2a76b9719d911017c592" Total size of bucket: 498B Folder number: 2 File number: 2
使用cp命令下载整个桶的对象到Windows的test目录下:
obsutil cp obs://test ./test -r -f Start at 2024-01-17 01:39:40.4700311 +0000 UTC Parallel: 5 Jobs: 5 Threshold: 50.00MB PartSize: auto VerifyLength: false VerifyMd5: false CheckpointDir: C:\Users\Administrator\.obsutil_checkpoint Task id: 72c5ac1c-68c0-4206-95d6-18a193bfa77e OutputDir: C:\Users\Administrator\.obsutil_output TempFileDir: C:\Users\Administrator\temp [---------------------------] 100.00% tps:484.98 162.11KB/s 4/4 498B/498B 205ms Succeed count: 4 Failed count: 0 Succeed bytes: 498B Metrics [max cost:86 ms, min cost:85 ms, average cost:43.25 ms, average tps:9.13, transferred size:498B] Task id: 72c5ac1c-68c0-4206-95d6-18a193bfa77e
使用dir /b /s 查看test路径下的所有文件和文件夹以及子目录下的文件,发现只保留了文件夹TEST\和文件TEST\foo.txt。
在该场景下本地文件不一定对应原始OBS文件,在这个例子中,本地TEST\foo.txt 是云上TEST/FOO.txt,而非test/foo.txt,这个因下载成功顺序而导致结果不同。
- 针对文件夹,以首次文件夹名下载成功为准,比如TEST/优先 test/下载成功,则最后本地文件夹只有TEST\。
- 针对文件,文件名以首次文件名下载成功为准,文件内容以最后一次下载成功为准,比如云上的对象test/foo.txt优先TEST/FOO.txt下载成功,则最后本地文件只有foo.txt(文件名),但是文件内容是FOO.txt的内容。