GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara menampilkan hanya file dari perintah aws s3 ls?

Gunakan s3api dengan jq (objek daftar AWS docu aws s3api):

Mode ini selalu rekursif.

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

Anda dapat memfilter sub direktori dengan menambahkan awalan (di sini foo direktori). Awalan tidak boleh dimulai dengan / .

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

Opsi jq:

  • -r =Mode Mentah, tidak ada tanda kutip di keluaran
  • .Contents[] =Dapatkan Contents Konten Larik Objek
  • .Key =Dapatkan setiap Bidang Kunci (tidak menghasilkan Array JSON yang valid, tetapi kami dalam mode mentah, jadi kami tidak peduli)

Tambahan :

Anda dapat menggunakan AWS CLI murni, tetapi nilainya akan dipisahkan oleh \x09 =Tab Horizontal (AWS:Mengontrol Keluaran Perintah dari AWS CLI - Format Keluaran Teks)

$ 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   [...]

Opsi AWS CLI:

  • --query "Contents[].Key" =Query Contents Object Array dan dapatkan setiap Kunci di dalam
  • --output text =Keluaran sebagai Teks yang dibatasi Tab dengan Kutipan sekarang

Tambahan berdasarkan Komentar Guangyang Li :

CLI AWS Murni dengan Jalur Baru:

$ 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
[...]

Anda tidak dapat melakukan ini hanya dengan aws perintah, tetapi Anda dapat dengan mudah menyalurkannya ke perintah lain untuk menghapus bagian yang tidak Anda inginkan. Anda juga perlu menghapus --human-readable flag untuk mendapatkan output lebih mudah untuk dikerjakan, dan --summarize tandai untuk menghapus data ringkasan di bagian akhir.

Coba ini:

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

Sunting:untuk mempertimbangkan spasi dalam nama file:

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

Cara Sederhana

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

Filter sederhana adalah:

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

Ini akan menghapus tanggal, waktu dan ukuran. Hanya tersisa path lengkap dari file tersebut. Ini juga berfungsi tanpa rekursif dan juga harus bekerja dengan nama file yang berisi spasi.


Linux
  1. Pada Sistem Apa //foo/bar Berbeda Dari /foo/bar?

  2. Apakah Rsync ~/foo Target/foo Sama Dengan Rsync ~/foo/ Target/foo/?

  3. Perintah Linux:Bagaimana cara 'menemukan' hanya file teks?

  1. Cara Mengganti Nama File di Linux

  2. Cara Mengecualikan File Ukuran Tertentu Dari Menyalin Di Linux

  3. Bagaimana cara mengetahui dari folder mana suatu proses sedang berjalan?

  1. Cara Menghapus File dan Direktori di Linux dari Command Line

  2. Cara Memisahkan Dan Menggabungkan File Dari Baris Perintah Di Linux

  3. Haruskah situs web berada di /var/ atau /usr/ sesuai dengan penggunaan yang disarankan?