Amazon s3 如何在AmazonS3中查找零字节文件

Amazon s3 如何在AmazonS3中查找零字节文件,amazon-s3,s3cmd,Amazon S3,S3cmd,有没有一种方法可以通过编程在AmazonS3中查找零字节文件 铲斗的总尺寸超过100G, 我不太可能同步回服务器,然后执行 find . -size 0 -type f 在AmazonS3上没有搜索零字节大小文件的直接过程。您可以列出所有对象,然后根据大小对这些项进行排序,然后将所有零文件大小合并在一起 如果您想获得大小为零的所有文件的列表,那么您可以使用Bucket Explorer列出所选Bucket的对象,然后单击大小标题(按大小排序),它将把大小为零字节的文件放在一起 披露:我是Buc

有没有一种方法可以通过编程在AmazonS3中查找零字节文件

铲斗的总尺寸超过100G,
我不太可能同步回服务器,然后执行

find . -size 0 -type f

在AmazonS3上没有搜索零字节大小文件的直接过程。您可以列出所有对象,然后根据大小对这些项进行排序,然后将所有零文件大小合并在一起

如果您想获得大小为零的所有文件的列表,那么您可以使用Bucket Explorer列出所选Bucket的对象,然后单击大小标题(按大小排序),它将把大小为零字节的文件放在一起

披露:我是Bucket Explorer的开发者。

只需使用:

从boto导入S3连接
aws\u访问\u密钥=“”
aws_密钥=“”
bucket_name=“”
s3\u连接=s3连接(aws\u访问密钥、aws\u保密密钥)
s3连接获取存储桶(存储桶名称)
对于bucket.list()中的键:
如果key.size==0:
打印(键。键)

关于文件数量,Boto以每次1000(aws限制)的速度请求文件元数据(而不是实际的文件内容),并且它使用了一个生成器,因此内存使用量很小。

将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

内存方面,这应该很好,因为它是一个简单的bucket列表。

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

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`]'

我真的有很多文件,这不会导致内存耗尽吗?除了下载或使用S3API并同步到数据库之外,还有更好的解决方案。什么是boto?想要分享吗?这也适用于awscli软件包。语法将是
awss3ls--recursive s3://bucketname | awk'{if($3==0)print$4}'