我试图将大约 5000 万个文件和 15TB 的总大小从一个 s3 存储桶复制到另一个存储桶。有 AWS CLI 选项可以快速复制。但就我而言,我想放置一个过滤器和日期范围。于是想到用boto3写代码。
源桶输入结构:
Run Code Online (Sandbox Code Playgroud)Folder1 File1 - Date1 File2 - Date1 Folder2 File1 - Date2 File2 - Date2 Folder3 File1_Number1 - Date3 File2_Number1 - Date3 Folder4 File1_Number1 - Date2 File2_Number1 - Date2 Folder5 File1_Number2 - Date4 File2_Number2 - Date4
因此,目的是使用日期范围(Date2 到 Date4)从每个文件夹中复制以“File1”开头的所有文件。date(Date1, Date2, Date3, Date4) 是文件修改日期。
输出将具有日期键分区,我使用 UUID 来保持每个文件名的唯一性,因此它永远不会替换现有文件。因此,具有相同日期(文件的修改日期)的文件将位于同一文件夹中。
目标桶会有输出:
Run Code Online (Sandbox Code Playgroud)Date2 File1_UUID1 File1_Number1_UUID2 Date3 File1_Number1_UUID3 Date4 File1_Number2_UUID4
我已经使用 boto3 API 和 AWS 胶水编写了代码来运行代码。但是 boto3 API 每天复制 50 万个文件。
编码:
s3 = boto3.resource('s3', region_name='us-east-2', …
Run Code Online (Sandbox Code Playgroud)