簡體   English   中英

如何在 Amazon S3 中查找零字節文件

[英]How to find zero byte files in Amazon S3

有沒有辦法以編程方式在 Amazon S3 中查找零字節文件?

桶的總大小超過100G,
我不太可能同步回服務器,然后做一個

find . -size 0 -type f

將s3cmd與awk結合起來應該可以輕松完成。

注意:s3cmd輸出4列,日期,時間,大小和名稱。 您希望將大小(第3列)與0匹配,並輸出對象名稱(第4列)。 這應該是訣竅......

$ s3cmd ls -r s3://bucketname | awk '{if ($3 == 0) print $4}'
s3://bucketname/root/
s3://bucketname/root/e

如果你想查看所有信息,只需刪除$ 4,這樣它就只能打印。

$ s3cmd ls -r s3://bucketname | awk '{if ($3 == 0) print}' 
2013-03-04 06:28         0   s3://bucketname/root/
2013-03-04 06:28         0   s3://bucketname/root/e

在記憶方面,這應該沒問題,因為它是一個簡單的桶列表。

在亞馬遜s3上沒有直接的過程來搜索大小為零字節的文件。 您可以通過列出所有對象然后根據大小對這些項進行排序來實現,然后您可以將所有零文件大小放在一起。

如果你想獲得大小為零的所有文件的列表,那么你可以使用Bucket Explorer並列出所選存儲桶的對象,然后單擊大小標題(按大小排序)它將文件大小保持為零字節。

披露 :我是Bucket Explorer的開發人員。

只需使用Boto

from boto import S3Connection
aws_access_key = ''
aws_secret_key = ''
bucket_name = ''
s3_conn = S3Connection(aws_access_key, aws_secret_key)
s3_conn.get_bucket(bucket_name)
for key in bucket.list():
    if key.size == 0:
        print(key.key)

關於數字文件,Boto每次請求1000個文件元數據(不是實際文件內容)(aws限制),並且它使用生成器,因此內存使用量很小。

使用基本模式匹配查找零長度文件:

hdfs dfs -ls -R s3a://bucket_path/ | grep '^-' | awk -F " " '{if ($4 == 0) print $4, $7}'

JMSE查詢:

aws s3api list-objects --bucket $BUCKET --prefix $PREFIX --output json --query 'Contents[?Size==`0`]'
const getBucketFileSize = async function () {
  try {
    const response = await s3
      .listObjectsV2({
        Bucket: //Bucket-name,
        Prefix: //Provide Bucket Prefix if available,
      })
      .promise();

    response.Contents.map(item=>{
         if(item.Size===0){
            console.log(item)
         }
    })
  } catch (e) {
    console.log("err", e);
  }
};

暫無
暫無

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

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