Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 为什么s3cmd du根据路径末尾的斜线给出不同的结果?_Amazon Web Services_Amazon S3_S3cmd - Fatal编程技术网

Amazon web services 为什么s3cmd du根据路径末尾的斜线给出不同的结果?

Amazon web services 为什么s3cmd du根据路径末尾的斜线给出不同的结果?,amazon-web-services,amazon-s3,s3cmd,Amazon Web Services,Amazon S3,S3cmd,给21克 s3cmd du -H s3://bucketabc/prefix/further-prefix 给10克 那里没有直接的文件,只有四个子目录 我有五个桶接近副本,这只发生在其中的两个。其他的显示10G一致 bucket和一个看似无关的bucket之间唯一明显的区别是,这两个提供10G(带或不带斜杠)的bucket比其他bucket多了一个子目录,其中只有一个138M文件 为什么是21G对10G?正确答案是什么?在S3 REST API中,在遍历对象时,通常会指定一个键前缀,这是一个

给21克

s3cmd du -H s3://bucketabc/prefix/further-prefix
给10克

那里没有直接的文件,只有四个子目录

我有五个桶接近副本,这只发生在其中的两个。其他的显示10G一致

bucket和一个看似无关的bucket之间唯一明显的区别是,这两个提供10G(带或不带斜杠)的bucket比其他bucket多了一个子目录,其中只有一个138M文件


为什么是21G对10G?正确答案是什么?

在S3 REST API中,在遍历对象时,通常会指定一个键前缀,这是一个左锚定的子字符串,匹配所有要返回的键值

当你告诉S3你想要
foo/
时,你当然想要的是
foo/*

也许不那么直观的是,要求
foo
实际上是要求
foo*
,这包括
foo*/*

这是前缀匹配。任何具有匹配前缀的键都将被包括在内,因此前缀
foo
不仅包括
foo/*
,还包括
foobar/*
,等等

这就是为什么我们中的一些人似乎很喜欢发出友好的提示:“S3不是文件系统,它是一个对象存储”,尽管在某种程度上,您已经知道了这一点。它并不完全遵循文件系统语义。我认为,这是有时看似微妙的区别很重要的原因之一

与文件系统不同,S3中的目录层次结构实际上并不存在。这是一个基于
/
字符的方便错觉。您可以在控制台中创建的文件夹类似于一种幻觉——它们是空对象,控制台允许您添加这些对象,以便在bucket中实际有任何具有该前缀的键之前创建层次结构的外观。所以,没有对象实际上是“在”文件夹中的概念,它们只是“在”文件夹下


如果没有尾随斜杠,我怀疑您的匹配比您预期的要多,因为前缀匹配范例。

s3cmd是一个过时的程序,但是如果您添加
--verbose
,它会给出什么?它列出文件了吗?(如果是这样,请将行粘贴到此处)带尾随斜杠的返回更多?@Michael sqlbot很好,带斜杠的返回更少(10G)@tedder42 s3cmd有什么替代品?@tedder42 du-H--verbose生成与不带斜杠的相同的输出--verbose(无其他信息)是的,就是这样。我之前没有注意到其他的“目录”,它们只在这两个存储桶中。我知道AWS“目录”并不是真正的目录,但发现有些功能将斜杠视为一个特殊的分隔符。不管怎样,您已经知道了。是的,
/
通常被视为路径分隔符,但是在API级别,您必须指定它,这样才能实现。。。如果使用了它,您只能下载一个“目录”的内容,并且您必须不断重复下载、下载、下载,发送额外的请求,这会影响性能,并且可能会增加大量请求的成本。
s3cmd du -H s3://bucketabc/prefix/further-prefix/