GNU/Linux >> Linux の 問題 >  >> Linux

aws s3 ls コマンドからファイルのみを表示するには?

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}//'

これにより、日付、時刻、およびサイズが削除されます。ファイルのフルパスのみを残しました。再帰なしでも機能し、スペースを含むファイル名でも機能するはずです。


Linux
  1. Linuxでファイルの名前を変更する方法

  2. Linuxでコマンドラインからファイルを分割して結合する方法

  3. Linuxは複数の連続したパスセパレーター(/ home //// username /// file)をどのように処理しますか?

  1. Rsync〜/ foo Target / fooはRsync〜/ foo / Target / foo /と同じですか?

  2. CMAKE_INSTALL_PREFIX の使い方

  3. コマンドラインからGnomeを使用してファイル/ディレクトリを起動

  1. Linuxでコマンドラインからファイルとディレクトリを削除する方法

  2. Linuxで特定のサイズのファイルをコピーから除外する方法

  3. パスなしでfindコマンドから名前だけを取得する方法