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
メモリに関しては、これは単純なバケットリストであるため、問題ないはずです。
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はファイルメタデータ(実際のファイルコンテンツではない)を1回あたり1000(aws制限)で要求し、ジェネレーターを使用するため、メモリ使用量はわずかです。
JMSEクエリ:
aws s3api list-objects --bucket $BUCKET --prefix $PREFIX --output json --query 'Contents[?Size==`0`]'
Amazon s3では、サイズが0バイトのファイルを直接検索するプロセスはありません。すべてのオブジェクトを一覧表示し、サイズに基づいてそのアイテムを並べ替えると、すべてのゼロファイルサイズをまとめて取得できます。
サイズがゼロのすべてのファイルのリストを取得する場合は、バケットエクスプローラーを使用して、選択したバケットのオブジェクトを一覧表示し、サイズヘッダー(サイズで並べ替え)をクリックすると、ゼロバイトのファイルサイズが一緒に保持されます。
開示:私はバケットエクスプローラーの開発者です。
基本的なパターンマッチングを使用して長さゼロのファイルを検索します。
hdfs dfs -ls -R s3a://bucket_path/ | grep '^-' | awk -F " " '{if ($4 == 0) print $4, $7}'