2014-09-22 2 views
7

В Linux мы обычно используем команды head/tail для предварительного просмотра содержимого файла. Это помогает в просмотре части файла (например, для проверки формата), а не для открытия всего файла.Команда «head» для aws s3 для просмотра содержимого файла

В случае Amazon S3, кажется, что есть только ls, cp, mv и т. Д. commands Я хотел знать, можно ли просмотреть часть файла без скачивания всего файла на моей локальной машине с помощью cp /ПОЛУЧИТЬ.

ответ

5

Вы можете указать диапазон байтов при извлечении данных из S3, чтобы получить первые N байтов, последние N байтов или все, что находится между ними. (Это также полезно, поскольку позволяет загружать файлы параллельно - просто запустите несколько потоков или процессов, каждый из которых получает часть общего файла.)

Я не знаю, какие из инструментов CLI поддерживают этот напрямую, но поиск диапазона делает то, что вы хотите.

Инструмент AWS CLI («aws s3 cp», если быть точным) не позволяет выполнять поиск диапазона, но s3curl (http://aws.amazon.com/code/128) должен делать трюк. (Точно так же обычный скручивание, например, с параметром --range но тогда вы должны сделать подписание запроса по своему усмотрению)

+1

См. Http://docs.aws.amazon.com/AmazonS3/latest/dev/GettingObjectsUsingAPIs.html о том, как реализовать это самостоятельно, используя различные SDK AWS. –

+0

Спасибо. Я просто использую s3curl. Однако вариант использования достаточно распространен, чтобы его можно было поддерживать. – nutsiepully

0

Нет такой возможности. Вы можете получить только весь объект. Вы можете выполнить HTTP HEAD request для просмотра метаданных объекта, но это не то, что вы ищете.

+0

Спасибо. Однако это не имеет смысла. Или я думаю, это просто помогает их биллинг в сети. – nutsiepully

+0

@ nutsiepully Ответ Майкла Ханиша лучше моего, поскольку он предлагает решение, вы должны принять его вместо этого! –

+0

Спасибо за то, что так изящно. Я думал об этом, но не был уверен :-) – nutsiepully

16

Одна вещь, которую вы можете сделать, это сП объекта Стаут, а затем трубы его головы:.

aws s3 cp s3://path/to/my/object - | head 

вы получаете сломанный ошибку трубы в конце, но он работает.

+3

Это отлично! – Yavar

5

Вы можете использовать переключатель range для старой команды s3api get-object, чтобы вернуть первые байты объекта s3. (AFAICT s3 не поддерживает переключатель.)

Труба \dev\stdout может быть передана в качестве целевого файла, если вы просто хотите, чтобы просмотреть объект S3 с помощью трубопровода к head. Вот пример:

aws s3api get-object --bucket mybucket_name --key path/to/the/file.log --range bytes=0-10000 /dev/stdout | head

Наконец, если как я вы имеете дело со сжатыми .gz файлов, выше метод работает также с zless позволяет просматривать главу распакованного файла:

aws s3api get-object --bucket mybucket_name --key path/to/the/file.log.gz --range bytes=0-10000 /dev/stdout | zless

Один совет с zless: если он не работает, попробуйте увеличить размер диапазона.

2

Если вы не хотите, чтобы загрузить весь файл, вы можете скачать его часть с --range опции, указанной в команде aws s3api и после того, как файл часть загружается, а затем запустить head команды на этот файл.

Пример:

aws s3api get-object --bucket my_s3_bucket --key s3_folder/file.txt --range bytes=0-1000000 tmp_file.txt && head tmp_file.txt 

Пояснение:

aws s3api get-object загружает часть файла s3 из указанного ведра и s3 папку с указанным размером в --range до указанного выходного файла. Команда && выполняет вторую команду только в том случае, если первая выполнена успешно. Вторая команда печатает 10 первых строк ранее созданного выходного файла.

Смежные вопросы