Подтвердить что ты не робот

Как отображать только файлы из команды aws s3 ls?

Я использую aws cli для перечисления файлов в ведро s3 с помощью следующей команды (documentation):

aws s3 ls s3://mybucket --recursive --human-readable --summarize

Эта команда дает мне следующий вывод:

2013-09-02 21:37:53   10 Bytes a.txt
2013-09-02 21:37:53  2.9 MiB foo.zip
2013-09-02 21:32:57   23 Bytes foo/bar/.baz/a
2013-09-02 21:32:58   41 Bytes foo/bar/.baz/b
2013-09-02 21:32:57  281 Bytes foo/bar/.baz/c
2013-09-02 21:32:57   73 Bytes foo/bar/.baz/d
2013-09-02 21:32:57  452 Bytes foo/bar/.baz/e
2013-09-02 21:32:57  896 Bytes foo/bar/.baz/hooks/bar
2013-09-02 21:32:57  189 Bytes foo/bar/.baz/hooks/foo
2013-09-02 21:32:57  398 Bytes z.txt

Total Objects: 10
   Total Size: 2.9 MiB

Однако это мой желаемый результат:

a.txt
foo.zip
foo/bar/.baz/a
foo/bar/.baz/b
foo/bar/.baz/c
foo/bar/.baz/d
foo/bar/.baz/e
foo/bar/.baz/hooks/bar
foo/bar/.baz/hooks/foo
z.txt

Как я могу опустить дату, время и размер файла, чтобы показать только список файлов?

4b9b3361

Ответ 1

Вы не можете сделать это только с aws команды aws, но вы можете легко aws ее другой команде, чтобы удалить aws часть. Вам также необходимо убрать флаг --human-readable чтобы легче было работать с выводом, и флаг --summarize чтобы удалить итоговые данные в конце.

Попробуй это:

aws s3 ls s3://mybucket --recursive | awk '{print $4}'

Изменение: чтобы учитывать пробелы в именах файлов:

aws s3 ls s3://mybucket --recursive | awk '{$1=$2=$3=""; print $0}' | sed 's/^[ \t]*//'

Ответ 2

Простым фильтром будет:

aws s3 ls s3://mybucket --recursive | perl -pe 's/^(?:\S+\s+){3}//'

Это позволит удалить дату, время и размер. Остался только полный путь к файлу. Он также работает без рекурсивного, и он также должен работать с именем файла, содержащим пробелы.

Ответ 3

Используйте s3api с jq (AWS document aws s3api list-objects):

Этот режим всегда рекурсивный.

$ aws s3api list-objects --bucket "bucket" | jq -r '.Contents[].Key'
a.txt
foo.zip
foo/bar/.baz/a
[...]

Вы можете отфильтровать подкаталоги, добавив префикс (здесь каталог foo). Префикс не должен начинаться с /.

$ aws s3api list-objects --bucket "bucket" --prefix "foo/" | jq -r '.Contents[].Key'
foo/bar/.baz/a
foo/bar/.baz/b
foo/bar/.baz/c
[...]

Параметры jq:

  • -r= необработанный режим, без кавычек на выходе
  • .Contents[]= Получить Contents объекта Array Content
  • .Key= Получить каждое поле ключа (не генерирует допустимый массив JSON, но мы находимся в необработанном режиме, поэтому нам все равно)

Приложение:

Вы можете использовать чистый интерфейс командной строки AWS, но значения будут \x09= Горизонтальная вкладка (AWS: Управление выводом команды из интерфейса командной строки AWS - Формат вывода текста)

$ aws s3api list-objects --bucket "bucket" --prefix "foo/" --query "Contents[].Key" --output text
foo/bar/.baz/a   foo/bar/.baz/b   foo/bar/.baz/c   [...]

Параметры интерфейса командной строки AWS:

  • --query "Contents[].Key"= Query Contents Object Array и получить каждый ключ внутри
  • --output text= Вывести как текст с разделителями табуляции с кавычками

Ответ 4

Простой способ

aws s3 ls s3://mybucket --recursive --human-readable --summarize|cut -c 29-

Ответ 5

Я считаю, что проще всего использовать только имена файлов:

aws s3 ls s3://path/to/bucket/| cut -d " " -f 4

Это cut -d " " возвращенный вывод в cut -d " " (cut -d " ") и вернет четвертый столбец (-f 4), который является списком имен файлов.

Ответ 6

Простая команда будет

aws s3 ls s3://mybucket --recursive --human-readable --summarize |cut -d ' ' -f 8

Если вам нужна отметка времени, просто обновите значения поля команды.

Ответ 7

Мое решение

Список только файлов рекурсивно, используя aws cli.

aws s3 ls s3://myBucket --recursive | awk 'NF>1{print $4}' | grep .

grep. - Очистить пустые строки.


Пример: aws s3 ls s3://myBucket

                           PRE f5c10c1678e8484482964b8fdcfe43ad/
                           PRE f65b94ad31734135a61a7fb932f7054d/
                           PRE f79b12a226b542dbb373c502bf125ffb/
                           PRE logos/
                           PRE test/
                           PRE userpics/
2019-05-14 10:56:28       7754 stage.js

Решение: aws s3 ls s3://myBucket --recursive | awk 'NF>1{print $4}' | grep. aws s3 ls s3://myBucket --recursive | awk 'NF>1{print $4}' | grep.

stage.js