Как отображать только файлы из команды 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
Как я могу опустить дату, время и размер файла, чтобы показать только список файлов?
Ответы
Ответ 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