如何在“s3 sync”中包含空文件夹?

时间:2014-12-04 20:24:34

标签: amazon-web-services amazon-s3

默认情况下,“s3 sync”似乎不会在目标目录中创建空文件夹

aws s3 sync s3://source-bucket s3://dest-bucket --include "*" --recursive

我现在已经搜索了一个小时,在使用“sync”或“cp”

时似乎无法找到解决空文件夹/目录的问题

fwiw,我确实看到了以下可能与空文件夹有关的消息,但由于源存储桶非常庞大且难以处理,因此很难确定。

Completed 4132 of 4132 part(s) with -5 file(s) remaining

4 个答案:

答案 0 :(得分:6)

S3没有目录概念。 S3是对象存储,其中每个对象由密钥标识。 密钥可能是一个字符串,如" logs / 2014/06/04 / system.log"

S3之上的大多数图形用户界面(AWS CLI,AWS控制台,Cloudberry,传输等......)都会解释" /"字符作为目录分隔符并显示文件列表"按原样#34;它在目录结构中。

但是,在内部,没有目录的概念,S3具有平面命名空间。 有关详细信息,请参阅http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMetadata.html

知道了这一点,我并不感到惊讶,因为S3上没有目录,所以没有同步空目录

答案 1 :(得分:3)

目前还没办法,但功能请求已打开,可以添加复制功能,也可以复制空目录。

https://github.com/aws/aws-cli/issues/912

答案 2 :(得分:0)

目前还没有官方的方式。

您可以使用S3cmd代替官方AWS客户端,我读过它支持同步空目录。

或者,您可以使用bash将文件添加到空目录:

<li><span class="gap">...</span></li>

偏离主题但相关:我不希望复制符号链接文件(链接文件是本地时的默认值)但我确实希望保留结构(--no-follow-symlinks忽略链接) 。所以一个单行将链接复制到文本文件中:

find . -type d -empty -exec touch {}/empty.txt \;

答案 3 :(得分:0)

这是一个老问题,但它仍然相关,所以我会回答它。

我遇到了这个问题,我通过在名为 .folderkeep 的文件夹中创建一个空文件来解决它,其中没有数据。因此,当您同步它时,它将创建文件夹。

它只是存在于一个文件夹中。它与其他数据无关。而且它以“.”开头,所以它会隐藏在文件系统中。