簡體   English   中英

無論如何,是否使用ls和通配符從s3存儲桶中提取文件? (aws cli)

[英]Is there anyway to extract files from an s3 bucket using ls and wildcards? (aws cli)

嘗試在s3存儲桶中的目錄中列出匹配文件時遇到了幾個問題。

我一直在使用ls來創建特定目錄(包括時間戳和文件大小)中所有文件的列表,方法是將其附加到新文件中,例如aws s3 --profile mybucket1 ls s3://my-bucket1/directory1/directory2/ >> list.txt

這正在快速且按預期工作。 但是,我在目錄1中也有一些文件也要列出,但是只有某些文件與特定字符串匹配,且周圍帶有通配符。

我最接近實現此目標的方法是使用cp(帶有--exclude和--include)而不是ls,因為ls不允許您使用--exclude或--include選項,例如aws s3 --profile mybucket1 cp s3://my-bucket1/directory1/ /path/to/local/directory/ --exclude "*" --include "*match-me*" --recursive但要永久復制一個單個文件(我沒有得到任何標准輸出,因為我相信它會在復制任何內容之前掃描整個目錄以查找匹配的字符串)。 我也無法刪除--recursive,因為即使沒有,它也會給我一個錯誤,即使我只想復制directory1中的文件。

我的偏好是為此使用ls,因為它更快,而且我不必再對下載的文件再進行ls生成與我列出並從directory2追加的文件相同的格式。

另外,如果有任何不同,我將在bash腳本中運行所有這些命令。

我希望這是有道理的,如果有人對此有任何可能的解決方案,將不勝感激。

您應該查看aws s3api list-objects

  1. 如果您的模式位於鍵的開頭,並且您想與match-me*進行match-me* ,則可以使用--prefix參數:

     aws s3api list-objects --bucket <bucket> --prefix "match-me" 

    將返回以match-me開頭的所有鍵

  2. 如果您的模式位於鍵名的中間,並且想與*match-me*進行匹配,則可以對結果進行查詢:

     aws s3api list-objects --bucket test-bucket-fh --query "Contents[?contains(Key, 'match-me')]" 

如果您不急於列出Amazon S3的內容(例如每天列出一次),則可以使用Amazon S3存儲清單

Amazon S3庫存 每天或每周為S3存儲桶或共享前綴(即名稱以通用開頭的對象)提供對象及其對應的元數據的逗號分隔值(CSV)平面文件輸出串)。

它在Amazon S3中提供每日/每周文件,其中包含所有對象的列表。 需額外收費

暫無
暫無

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

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