Вы можете использовать высокоуровневый s3
api:
aws s3 mv s3://bucket/object.txt s3://bucket/folder/object.txt
Однако вам потребуется указать полное имя объекта - подстановочные знаки не работают.
Вы можете использовать сценарий для перебора содержимого сегмента с помощью команды Linux cut
для извлечения имени объекта перед выполнением операции aws s3 mv
для каждого имени объекта.Сохраните ниже как script.sh
:
#!/bin/bash
IFS=$'\n'
while read LINE; do
OBJECT=`echo $LINE | cut -d ' ' -f 5`
aws s3 mv s3://bucket/$OBJECT s3://bucket/folder/
done < objects.txt
Выше читается каждая строка из файла objects.txt
, cuts
строка только в поле ключа объекта (так называемое имя файла), а затем передает это полек команде aws s3 mv
.
Затем вы запустите это так:
chmod +x script.sh // remember to make the script executable
aws s3 ls s3://bucket/ > objects.txt
./script.sh
Обратите внимание, что если у вас есть сотни текстовых файлов, это может привести к удушению в вашем S3 ведро,Если у вас есть столько файлов, я бы посоветовал вам добавить небольшую задержку в цикл while
выше, чтобы гарантировать, что вы отправляете менее 100 запросов в секунду.
Задержка в 20 мс будет означать, что вы отправляете 50 запросов на S3 в секунду.В этом случае полное выполнение может занять несколько секунд, но это должно быть приемлемо, учитывая, что это однократная операция.
РЕДАКТИРОВАТЬ Внимание!Возможно, вы захотите добавить проверку в цикл while, чтобы убедиться, что имя файла заканчивается на .txt
перед выполнением mv
.Это обеспечит перемещение только текстовых файлов.