2016-04-23 4 views
14

Я использую AWS кли список файлов в качестве s3 ведре с помощью следующей команды (documentation):Как отображать только файлы из команды aws s3 ls?

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 

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

ответ

23

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

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

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

Edit: принимать пробелы в именах файлов во внимание:

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

Частично правильный ответ - он не будет работать, если в имени файла есть пробел. Также 'awk '{print $ 5}'', а не '$ 4' –

+3

@MichalGasek, если вы удаляете флаг' --human-readable', как я указал, то это $ 4, а не $ 5. –

+0

Правильно, тогда это 4 доллара. Он по-прежнему должен иметь дело с пробелами в именах файлов ... в противном случае возникают сюрпризы. –

5

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

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

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

0

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

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

в настоящее время для меня выходы' aws s3 ls', которые вы хотите вырезать на '-c32', а не' -c29'; не уверен, что это мои данные или изменение формата вывода. (На самом деле у меня нет подпапок.) Это справедливо для '--human-readable' или простого вывода по умолчанию; столбцы - одно и то же место. Но на самом деле, в этом случае нет необходимости в удобочитаемости.И в любом случае вы хотите опустить '--summarize'. Короче говоря, 'aws s3 ls s3: // mybucket | cut -c32-'(и' --recursive' только при желании) – michael

+0

Обратите внимание, что все остальные ответы здесь, которые пытаются вырезать на основе пробелов (awk, cut, whatever), не будут работать, если в именах файлов есть пробелы , – michael

0

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

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

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