web-dev-qa-db-ja.com

同じバケット内の多くのファイルの移動

バケットに200kのファイルがあり、同じバケット内のサブフォルダーに移動する必要がありますが、最善の方法は何ですか?

22
martin blank

最近、同じ問題が発生しました。コマンドライン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オプションを追加しました。

32
Matt Healy

最近、1つのコマンドでこれを行うことができました。各ファイルに対する個別のリクエストよりもはるかに高速でした。

次のようなスニペットを実行します。

aws s3 mv s3://bucket-name/ s3://bucket-name/subfolder --recursive --exclude "*" --include "*.txt"

使用 --includeフラグを使用して必要なファイルを選択的に選択します

15
nokatzhere

「名前の変更」操作はありませんが、あれば素晴らしいと思います。

代わりに、名前を変更する各アイテムをループし、新しいオブジェクトにコピーしてから、古いオブジェクトを削除する必要があります。

注:簡単にするために、バケットでバージョン管理が有効になっていないことを前提としています。

1
chilts

これと同じ問題が発生し、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
0
vpontis

以下のスクリプトは問題なく完全に機能します

for i in `cat s3folders`
do 
     aws s3 mv s3://Bucket_Name/"$i"/ s3://Another_Bucket_Name/ --recursive
done

また、ファイルがターゲットに移動すると、ソースから空のフォルダーが削除されます。

0
Rukmangathan