#amazon-web-services #amazon-s3 #aws-cli
Вопрос:
У меня есть корзина S3 с почти дубликатами файлов:
Если я запускаю интерфейс командной строки AWS, я получаю одни и те же пути к файлам, отличающиеся всего на несколько байтов:
2021-09-23 16:36:36 134626 Original/53866358.xml 2021-09-23 16:36:36 134675 Original/53866358.xml
Если я посмотрю на отдельные страницы объектов, у обоих будет один и тот же ключ:
Единственное отличие состоит в том, что
в конце URL-адреса объекта есть (возврат каретки ASCII). Предположительно, это файл большего размера. Мой вопрос: Как я могу получить уникальную ссылку на каждый из них, используя интерфейс командной строки AWS S3? Я бы хотел удалить те, у которых в конце есть возврат каретки.
Комментарии:
1. Разве вы не можете просто удалить его в консоли управления S3?
Ответ №1:
Это интересная проблема, просто чтобы заложить основу того, как мое решение поможет, я воссоздал проблему с помощью простого скрипта python:
import boto3 s3 = boto3.client('s3') s3.put_object(Bucket='example-bucket', Key='temp/key', Body=b'normal key') s3.put_object(Bucket='example-bucket', Key='temp/keyr', Body=b'this is not the normal key')
Оттуда вы можете увидеть проблему, как вы описываете:
$ aws s3 ls s3://example-bucket/temp/ 2021-12-03 20:14:45 10 key 2021-12-03 20:14:45 26 key
Вы можете перечислить объекты с более подробной информацией, используя интерфейс командной строки (некоторые сведения были удалены из вывода здесь).:
$ aws s3api list-objects --bucket example-bucket --prefix temp/ { "Contents": [ { "Key": "temp/key", "Size": 10 }, { "Key": "temp/keyr", "Size": 26 } ] }
Чтобы удалить объект с CR в имени ключа, проще всего использовать скрипт, но вы можете удалить его с помощью интерфейса командной строки, просто с несколько неудобным синтаксисом:
## If you're using Unix or Mac $ aws s3api delete-object --cli-input-json '{"Bucket": "example-bucket", "Key": "temp/keyr"}' ## If you're using Windows: C:gt; aws s3api delete-object --cli-input-json "{""Bucket"": ""example-bucket"", "" Key"": ""temp/keyr""}"
Обратите внимание, что требуется синтаксис для цитирования объекта JSON и экранирования кавычек в Windows.
Оттуда легко убедиться, что это сработало так, как ожидалось:
$ aws s3 ls s3://example-bucket/temp/ 2021-12-03 20:14:45 10 key $ aws s3 cp s3://example-bucket/temp/key final_check.txt download: s3://example-bucket/temp/key to ./final_check.txt $ type final_check.txt normal key