Перемещение множества файлов в одном ковше

У меня есть 200k файлов в ковше, которые мне нужно переместить в подпапку в том же ведре, какой лучший подход?

Ответ 1

Недавно я столкнулся с той же проблемой. Я решил это с помощью API командной строки.

http://docs.aws.amazon.com/cli/latest/index.html http://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.

Ответ 2

Недавно смог сделать это с помощью одной команды. Также пошли намного быстрее, чем отдельные запросы для каждого файла.

Запустить такой фрагмент кода:

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

Используйте флаг --include, чтобы выборочно выбрать нужные файлы.

Ответ 3

Нет операции "Переименовать", хотя было бы здорово, если бы это было.

Вместо этого вам нужно пропустить каждый элемент, который вы хотите переименовать, выполнить копию нового объекта, а затем удалить старый объект.

Примечание. Для упрощенных целей я предполагаю, что на вашем ведре не включено управление версиями.

Ответ 4

Приведенный ниже скрипт отлично работает для меня без проблем

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

Он также удаляет пустую папку из источника, как только файлы перемещаются в целевую папку

Ответ 5

У меня была такая же проблема, и я закончил использование aws s3 mv вместе с циклом bash for.

Я сделал 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