バケットに200kのファイルがあり、同じバケット内のサブフォルダーに移動する必要がありますが、最善の方法は何ですか?
最近、同じ問題が発生しました。コマンドラインAPIを使用して解決しました。
http://docs.aws.Amazon.com/cli/latest/index.htmlhttp://docs.aws.Amazon.com/cli/latest/reference/s3/ mv.html
aws s3 mv s3://BUCKETNAME/myfolder/photos/ s3://BUCKETNAME/myotherfolder/photos/ --recursive --acl public-read
オブジェクトを公開する必要があったので、aclオプションを追加しました。
最近、1つのコマンドでこれを行うことができました。各ファイルに対する個別のリクエストよりもはるかに高速でした。
次のようなスニペットを実行します。
aws s3 mv s3://bucket-name/ s3://bucket-name/subfolder --recursive --exclude "*" --include "*.txt"
使用 --include
フラグを使用して必要なファイルを選択的に選択します
「名前の変更」操作はありませんが、あれば素晴らしいと思います。
代わりに、名前を変更する各アイテムをループし、新しいオブジェクトにコピーしてから、古いオブジェクトを削除する必要があります。
注:簡単にするために、バケットでバージョン管理が有効になっていないことを前提としています。
これと同じ問題が発生し、bash for
ループとともにaws s3 mv
を使用することになりました。
バケット内のすべてのファイルを取得するためにaws ls bucket_name
を実行しました。次に、移動するファイルを決定し、それらをfile_names.txt
に追加しました。
次に、次のスニペットを実行して、すべてのファイルを移動しました。
for f in $(cat file_names.txt)
do
aws s3 mv s3://bucket-name/$f s3://bucket-name/subfolder/$f
done
以下のスクリプトは問題なく完全に機能します
for i in `cat s3folders`
do
aws s3 mv s3://Bucket_Name/"$i"/ s3://Another_Bucket_Name/ --recursive
done
また、ファイルがターゲットに移動すると、ソースから空のフォルダーが削除されます。