【问题标题】:How to include empty folders in "s3 sync"?如何在“s3 同步”中包含空文件夹?
【发布时间】:2015-02-02 21:11:12
【问题描述】:

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

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

【问题讨论】:

    标签: amazon-web-services amazon-s3


    【解决方案1】:

    S3 没有目录的概念。 S3 是一个对象存储,其中每个对象都由一个键标识。 键可能是类似“logs/2014/06/04/system.log”的字符串

    S3 之上的大多数图形用户界面(AWS CLI、AWS 控制台、Cloudberry、Transmit 等)将“/”字符解释为目录分隔符,并“按原样”显示文件列表在目录中结构。

    但是,在内部,没有目录的概念,S3 有一个扁平的命名空间。 详情请见http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMetadata.html。

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        目前还没有正式的方法。

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

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

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

        离题但相关:我不想复制符号链接文件(链接文件是本地文件时的默认值)但我确实想保留结构(--no-follow-symlinks 只是忽略链接) .因此,将链接复制到文本文件中的单行:

        find . -type l -exec bash -c 'readlink "$1" > "$1.symlink"' _ {} \;
        

        【讨论】:

        • 你如何用 s3cmd 做到这一点?我看不到对此功能的任何支持。
        【解决方案4】:

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-09-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多