Хотя ответ @ kintuparantu работает отлично, стоит упомянуть, что из-за части awk
сценарий учитывает только последнюю часть результатов ls
.Если в имени файла есть пробелы, awk
получит только последний сегмент имени файла, разделенный пробелами, а не все имя файла.
Пример: Файл с путем, подобным folder1/subfolder1/this is my file.txt
приведет к записи, называемой просто file.txt
.
Чтобы предотвратить это, все еще используя его скрипт, вам придется заменить $NF
в awk {print $NF}
на последовательность переменных заполнителей, которыеучитывает количество сегментов, к которым могла бы привести операция «разделить по пробелам». Поскольку в именах файлов может быть достаточно большое количество пробелов, я пошел с преувеличением, но, если честно, я считаю совершенно новымподход, вероятно, будет лучше иметь дело с этими случаями.Вот обновленный код:
#!/bin/sh
aws s3 ls --recursive s3://plusplus-staging | awk '{print $4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25}' | while read line; do
echo "$line"
aws s3api put-object-acl --acl private --bucket plusplus-staging --key "$line"
done
Я должен также упомянуть, что использование cut
не дало никаких результатов для меня, поэтому я удалил его.Кредиты по-прежнему отправляются в @kintuparantu, поскольку он создал сценарий.