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

问题描述 投票:0回答:5

默认情况下,“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
5个回答
6
投票

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

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

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

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


4
投票

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

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


1
投票

目前还没有官方的办法。

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

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

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

离题但相关:我不希望符号链接文件被重复(链接文件是本地时的默认设置),但我确实想保留结构(--no-follow-symlinks 只是忽略链接)。因此,只需将链接复制到文本文件即可:

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

1
投票

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

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

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


0
投票

aws s3 sync
命令不会在目标中创建空目录。这就是我在目标 S3 存储桶中创建空目录以与源 S3 存储桶匹配的方法(您可以在 CloudShell / Bash shell 中运行它):

#导出变量(请酌情修改变量值)

source_bucket_name="SOURCE_S3_BUCKET_NAME"

destination_bucket_name="DESTINATION_S3_BUCKET_NAME"

input_file="空目录.txt"

# 将空目录列表导出到名为“empty-directories.txt”的文件

aws s3api list-objects-v2 --bucket $source_bucket_name --query 'Contents[].{Key: Key}' | jq -r '.[] | select(.Key | endswith("/")) | .Key' > empty-directories.txt

# 在目标S3存储桶中创建空目录

while IFS= read -r folder_name || [ -n "$folder_name" ]; do
    # Ensure the folder name ends with a trailing slash
    folder_key="${folder_name%/}/"
    
    # Create the directory in the destination bucket
    aws s3api put-object --bucket "$destination_bucket_name" --key "$folder_key"
    
    echo "Created folder: $folder_key in bucket: $destination_bucket_name"
done < "$input_file"
© www.soinside.com 2019 - 2024. All rights reserved.