jq で s3api を使用します (AWS docu 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
=Raw モード、出力に引用符なし.Contents[]
=Contents
を取得 オブジェクト配列の内容.Key
=すべてのキー フィールドを取得します (有効な JSON 配列を生成しませんが、raw モードなので気にしません)
補遺 :
純粋な AWS CLI を使用できますが、値は \x09
で区切られます =水平タブ (AWS:AWS CLI からのコマンド出力の制御 - テキスト出力形式)
$ 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 CLI オプション:
--query "Contents[].Key"
=コンテンツ オブジェクト配列を照会し、内部のすべてのキーを取得--output text
=引用符付きのタブ区切りテキストとして出力
Guangyang Li コメントに基づく補遺 :
改行を含む純粋な AWS CLI:
$ aws s3api list-objects --bucket "bucket" --prefix "foo/" --query "Contents[].{Key: Key}" --output text
foo/bar/.baz/a
foo/bar/.baz/b
foo/bar/.baz/c
[...]
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]*//'
シンプルな方法
aws s3 ls s3://mybucket --recursive --human-readable --summarize|cut -c 29-
単純なフィルターは次のようになります:
aws s3 ls s3://mybucket --recursive | perl -pe 's/^(?:\S+\s+){3}//'
これにより、日付、時刻、およびサイズが削除されます。ファイルのフルパスのみを残しました。再帰なしでも機能し、スペースを含むファイル名でも機能するはずです。