web-dev-qa-db-ja.com

ワイルドカードを使用してAmazon S3バケットを検索するにはどうすればよいですか?

このstackoverflowの回答は大いに役立ちました。 ただし、指定されたバケット内のすべてのPDFを検索したいと思います。

  1. 「なし」をクリックします。
  2. 入力を開始します。
  3. 私はタイプする *.pdf
  4. Enterを押します

何も起こりません。ワイルドカードまたは正規表現を使用して、オンラインS3 GUIコンソールを介してバケット検索結果をフィルタリングする方法はありますか?

15
nu everest

コメントで述べたように、AmazonのUIは、独自のドキュメントに従って、プレフィックスによる検索にのみ使用できます。

http://docs.aws.Amazon.com/AmazonS3/latest/UG/searching-for-objects-by-prefix.html

検索方法は他にもありますが、少し手間がかかります。 2つのオプション、つまり AWS-CLI applicationまたは Boto の名前をPythonに付けます。

私はこの投稿が古いことを知っていますが、Googleのリストでs3検索の上位にあり、承認された回答がありません。 Harishによるもう1つの答えは、死んだサイトにリンクすることです。

18
Michael Hohlios

AWS CLI検索: AWSコンソールでは、ディレクトリ内のオブジェクトのみを検索できます。ディレクトリ全体ではなく、ファイルのプレフィックス名のみを使用して検索できます(S3検索の制限)。

最良の方法は、Linux OSで以下のコマンドを使用してAWS CLIを使用することです

aws s3 ls s3:// bucket_name/--recursive | grep search_Word |カット-c 32-

ワイルドカードを使用したファイルの検索 aws s3 ls s3:// bucket_name/--recursive | grep * .pdf

7
Tech Support

--dryrunフラグを指定してコピー関数を使用できます。

aws s3 ls s3://your-bucket/any-prefix/ .\ --recursive --exclude * --include *.pdf --dryrun

PDFであるすべてのファイルが表示されます。

3
user11002455

Pythonでboto3を使用する場合、ファイルを見つけるのは非常に簡単です。'bucket 'をバケットの名前に置き換えます。

import boto3
s3 = boto3.resource('s3')
bucket = s3.Bucket('bucket')
for obj in bucket.objects.all():
    if '.pdf' in obj.key:
        print(obj.key)
2
Matts

私は自分のプロジェクトの1つでこれを使用しましたが、少しハードコーディングしています

import subprocess
bucket = "Abcd"
command = "aws s3 ls s3://"+ bucket + "/sub_dir/ | grep '.csv'"
listofitems = subprocess.check_output(command, Shell=True,)
listofitems = listofitems.decode('utf-8')
print([item.split(" ")[-1] for item in listofitems.split("\n")[:-1]])
0
Deepak Tripathi