-1

我正在尝试让 aws cli 将文件从 s3 移动到 ec2 实例上的 ebs。我遇到的问题是aws cli中没有“移动”命令。如果有的话,它会让我的生活变得更加轻松。

从逻辑的角度来看,我需要创建一个脚本,从 s3 存储桶 (s3://bucket_name/AWSLogs/...) 复制数据,然后删除它刚刚复制的文件。我知道我可以设置生命周期片段来使数据过期,但万一将数据从 s3 复制到 ebs 的脚本不运行,我不想丢失数据。

AWS CLI 支持递归复制和删除,但我需要某种类型的 FOR 命令,该命令将使用文件名变量执行“aws s3 cp”命令,然后使用相同的文件名执行“aws s3 rm”。我已经搜索过所有内容,但我不知道为此存在任何工具/脚本。IANAP,所以我不知道如何将它移动到 python boto 脚本中,我只是希望有一种简单的方法可以使用 bash shell 脚本来完成。任何帮助。谢谢。

4

1 回答 1

0

我建议使用s3cmd来完成这项任务。s3cmd 基于 boto,支持从 / 同步目录到 S3。在这种情况下,您将在执行 s3cmd 的机器上获得可靠的同步和本地路径。

例如:

$ mkdir /home/user/logs/
$ s3cmd sync s3://org.example.mybucket/ /home/user/logs/

之后唯一的缺陷是s3cmd sync没有参数在将源文件同步到本地文件系统后删除它。为此,您仍然需要一个脚本来迭代同步到本地磁盘的文件并调用例如

$ s3cmd del s3://org.example.mybucket/log.txt

因此,如果我们假设您的同步存储桶中没有子目录,则此脚本应该可以解决问题:

#!/bin/bash
BUCKET='org.example.mybucket'
TARGET='/home/user/logs/'

# Ensure the directory is created
mkdir -p ${TARGET}

# Sync files from bucket
s3cmd sync s3://${BUCKET}/ ${TARGET}

# Iterate files and delete from bucket
for filename in ${TARGET}*; do
  s3cmd del s3://${BUCKET}/$(basename ${filename})
done

请小心,因为我只是在没有测试的情况下从我的脑海中编写了脚本。所以它可能包含一个错误......</p>

于 2014-05-17T19:03:53.100 回答