Quick way to list all files in Amazon S3 bucket?

前端 未结 28 1804
星月不相逢
星月不相逢 2020-11-28 01:32

I have an amazon s3 bucket that has tens of thousands of filenames in it. What\'s the easiest way to get a text file that lists all the filenames in the bucket?

28条回答
  •  失恋的感觉
    2020-11-28 01:47

    please try this bash script. it uses curl command with no need for any external dependencies

    bucket=
    region=
    awsAccess=
    awsSecret=
    awsRegion="${region}"
    baseUrl="s3.${awsRegion}.amazonaws.com"
    
    m_sed() {
      if which gsed > /dev/null 2>&1; then
        gsed "$@"
      else
        sed "$@"
      fi
    }
    
    awsStringSign4() {
      kSecret="AWS4$1"
      kDate=$(printf         '%s' "$2" | openssl dgst -sha256 -hex -mac HMAC -macopt "key:${kSecret}"     2>/dev/null | m_sed 's/^.* //')
      kRegion=$(printf       '%s' "$3" | openssl dgst -sha256 -hex -mac HMAC -macopt "hexkey:${kDate}"    2>/dev/null | m_sed 's/^.* //')
      kService=$(printf      '%s' "$4" | openssl dgst -sha256 -hex -mac HMAC -macopt "hexkey:${kRegion}"  2>/dev/null | m_sed 's/^.* //')
      kSigning=$(printf 'aws4_request' | openssl dgst -sha256 -hex -mac HMAC -macopt "hexkey:${kService}" 2>/dev/null | m_sed 's/^.* //')
      signedString=$(printf  '%s' "$5" | openssl dgst -sha256 -hex -mac HMAC -macopt "hexkey:${kSigning}" 2>/dev/null | m_sed 's/^.* //')
      printf '%s' "${signedString}"
    }
    
    if [ -z "${region}" ]; then
      region="${awsRegion}"
    fi
    
    
    # Initialize helper variables
    
    authType='AWS4-HMAC-SHA256'
    service="s3"
    dateValueS=$(date -u +'%Y%m%d')
    dateValueL=$(date -u +'%Y%m%dT%H%M%SZ')
    
    # 0. Hash the file to be uploaded
    
    # 1. Create canonical request
    
    # NOTE: order significant in ${signedHeaders} and ${canonicalRequest}
    
    signedHeaders='host;x-amz-content-sha256;x-amz-date'
    
    canonicalRequest="\
    GET
    /
    
    host:${bucket}.s3.amazonaws.com
    x-amz-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
    x-amz-date:${dateValueL}
    
    ${signedHeaders}
    e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
    
    # Hash it
    
    canonicalRequestHash=$(printf '%s' "${canonicalRequest}" | openssl dgst -sha256 -hex 2>/dev/null | m_sed 's/^.* //')
    
    # 2. Create string to sign
    
    stringToSign="\
    ${authType}
    ${dateValueL}
    ${dateValueS}/${region}/${service}/aws4_request
    ${canonicalRequestHash}"
    
    # 3. Sign the string
    
    signature=$(awsStringSign4 "${awsSecret}" "${dateValueS}" "${region}" "${service}" "${stringToSign}")
    
    # Upload
    
    curl -g -k "https://${baseUrl}/${bucket}" \
      -H "x-amz-content-sha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" \
      -H "x-amz-Date: ${dateValueL}" \
      -H "Authorization: ${authType} Credential=${awsAccess}/${dateValueS}/${region}/${service}/aws4_request,SignedHeaders=${signedHeaders},Signature=${signature}"
    

提交回复
热议问题