簡體   English   中英

使用前綴將數據從 s3 復制到本地

[英]copy data from s3 to local with prefix

我正在嘗試使用 aws-cli 將數據從 s3 復制到帶有前綴的本地。

但是我在使用不同的正則表達式時遇到了錯誤。

aws s3 cp s3://my-bucket-name/RAW_TIMESTAMP_0506* . --profile prod

錯誤:

未找到匹配項:s3://my-bucket-name/RAW_TIMESTAMP_0506*

aws s3 cp s3://my-bucket/ <local directory path> --recursive --exclude "*" --include "<prefix>*"

這將僅復制具有給定前綴的文件

以上無法正常工作的答案......例如,我在一個目錄中有數千個文件,我希望只檢索需要的文件..所以我嘗試了每個文檔的正確版本:

aws s3 cp s3://mybucket/sub /my/local/ --recursive --exclude "*" --include "20170906*.png"

它沒有下載前綴文件,而是開始下載所有內容

所以我嘗試了上面的示例:

aws s3 cp s3://mybucket/sub/ . /my/local --recursive --include "20170906*"

它還下載了所有內容...這似乎是aws cli的一個持續問題,他們無意修復它...這是我在谷歌搜索時發現的一些解決方法,但它們並不理想。

https://github.com/aws/aws-cli/issues/1454

aws s3 cp命令不接受通配符作為文件名(鍵)的一部分。 相反,您必須使用--include--exclude參數來定義文件名。

來自: 使用排除和包含過濾器

目前,不支持在命令的路徑參數中使用 UNIX 樣式的通配符。 但是,大多數命令都有--exclude "<value>"--include "<value>"參數可以達到預期的效果。 這些參數執行模式匹配以排除或包含特定文件或對象。 支持以下模式符號。

所以,你會使用類似的東西:

aws s3 cp s3://my-bucket-name/ . --include "RAW_TIMESTAMP_0506*"

如果您不喜歡靜音控制台,您可以通過管道aws ls通過awk並返回到aws cp

例子

# url must be the entire prefix that includes folders.
# Ex.: url='s3://my-bucket-name/folderA/folderB',
# not url='s3://my-bucket-name'
url='s3://my-bucket-name/folderA/folderB'
prefix='RAW_TIMESTAMP_0506'
aws s3 ls "$url/$prefix" | awk '{system("aws s3 cp '"$url"'/"$4 " .")}'

解釋

  • ls部分非常簡單。 我正在使用變量來簡化和縮短命令。 始終將 shell 變量用雙引號括起來以防止災難。
  • awk {print $4}只會從ls輸出中提取文件名(不是 S3 密鑰!這就是為什么 url 必須是包含文件夾的整個前綴。)
  • awk {system("echo " $4")}會做同樣的事情,但它通過調用另一個命令來完成。注意:我沒有使用子shell $(...) ,因為它會運行整個ls | awk開始cp之前的一部分。那會很慢,而且很長一段時間都不會打印任何東西。
  • awk '{system("echo aws s3 cp "$4 " .")}'將打印與我們想要的非常接近的命令。 注意間距。 如果你嘗試運行它,你會發現有些地方不太對勁。 這將產生類似aws s3 cp RAW_TIMESTAMP_05060402_whatever.log .
  • awk '{system("echo aws s3 cp '$url'/"$4 " .")}'是我們正在尋找的。 這會添加文件名的路徑。 仔細看引號。 請記住,我們將awk參數包含在單引號中,因此如果我們想在該參數中使用 shell 變量,我們必須關閉並重新打開引號。
  • awk '{system("aws s3 cp '"$url"'/"$4 " .")}'是最終版本。 我們只是刪除echo以實際執行awk創建的命令。 當然,我還用雙引號將$url變量括起來,因為這是一種很好的做法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM