我想下載來自 AWS s3 存盤桶的檔案,它們都具有相同的名稱,但位于不同的子檔案夾中。下載和連接到此存盤桶不需要任何憑據。我想下載所有名為“ B01.tif”的檔案s3://sentinel-cogs/sentinel-s2-l2a-cogs/7/V/EG/,并使用它們所在的子檔案夾的名稱保存它們(例如:)S2A_7VEG_20170205_0_L2AB01.tif。
路徑示例:
s3://sentinel-cogs/sentinel-s2-l2a-cogs/7/V/EG/2017/2/S2A_7VEG_20170205_0_L2A/B01.tif
我正在考慮使用列印 ls 輸出的 bash 腳本來下載帶有 cp 的檔案,并將其保存在我的電腦上,并使用從路徑生成的名稱。
使用 ls 命令:
aws s3 ls s3://sentinel-cogs/sentinel-s2-l2a-cogs/7/V/EG/2017/2/ --no-sign-request
下載單個檔案的命令:
aws s3 cp s3://sentinel-cogs/sentinel-s2-l2a-cogs/7/V/EG/2017/2/S2A_7VEG_20170205_0_L2A/B01.tif --no-sign-request B01.tif
嘗試下載多個檔案:
VAR1=B01.tif
for a in s3://sentinel-cogs/sentinel-s2-l2a-cogs/7/V/EG/:
for b in s3://sentinel-cogs/sentinel-s2-l2a-cogs/7/V/EG/2017/:
for c in s3://sentinel-cogs/sentinel-s2-l2a-cogs/7/V/EG/2017/2/:
NAME=$(aws s3 ls s3://sentinel-cogs/sentinel-s2-l2a-cogs/7/V/EG/$a$b$c | head -1)
aws s3 cp s3://sentinel-cogs/sentinel-s2-l2a-cogs/7/V/EG/$NAME/B01.tif --no-sign-request $NAME$VAR1
done
done
done
不知道有沒有簡單的方法可以自動遍歷每個子檔案夾,直接保存檔案。我知道我的 ls 命令壞了,因為如果有多個子檔案夾,它只會將第一個作為變數。
uj5u.com熱心網友回復:
使用編程語言而不是 Shell 腳本更容易做到這一點。
這是一個可以為您完成的 Python 腳本:
import boto3
BUCKET = 'sentinel-cogs'
PREFIX = 'sentinel-s2-l2a-cogs/7/V/EG/'
FILE='B01.tif'
s3_resource = boto3.resource('s3')
for object in s3_resource.Bucket(BUCKET).objects.filter(Prefix=PREFIX):
if object.key.endswith(FILE):
target = object.key[len(PREFIX):].replace('/', '_')
object.Object().download_file(target)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/318850.html
