如何按特定文件大小获取查询 s3 存储桶
How to get query s3 bucket by specific file size
目前上传的一些文件已损坏。它们的文件大小为 0 字节。请问如何查询我的 s3 存储桶并按特定大小过滤,我正在尝试查询字节为 0 时?
目前我有两个问题。
第一个递归列出存储桶中的所有文件,但没有排序。
aws s3 ls s3://testbucketname --recursive --summarize --human-readable
第二种排序,但仅当提供前缀时,在我的例子中,前缀是文件夹名称。我目前的bucket结构如下{accountId}/{filename}
aws s3api list-objects-v2 --max-items 10 --bucket testbucketname --prefix "30265" --query "sort_by(Contents,&Size)"
30265 是 accountId/folder 名称。如果未提供前缀,排序将无法正常工作。
如有任何帮助,我们将不胜感激。
此查询非常适合过滤字符串形式的名称
aws s3api list-objects --bucket testbucketname --query "Contents[?contains(Key, '.jpg')]"
不幸的是,我无法使用 contains 作为 Size,而且没有等号。
您可以使用 --query
逻辑将列表对象本地过滤为仅 zero-byte 大的对象:
aws s3api list-objects-v2 --bucket example-bucket --query 'Contents[?Size==`0`]'
或者,如果您只想查看没有其他键的列表 meta-data,您可以进一步过滤列表:
aws s3api list-objects-v2 --bucket example-bucket --query 'Contents[?Size==`0`].Key'
(对于这两个,当 Windows 上的 运行 时,将外部 '
替换为 "
。)
此外,如果目标是删除这些对象,您可以使用 jq 和子 shell 构造一个删除目标对象的查询:
aws s3api delete-objects --bucket example-bucket --delete \
"$(aws s3api list-objects-v2 --bucket example-bucket --query 'Contents[?Size==`0`].Key' |\
jq '{"Objects": map({"Key":.})}')"
没有直接的方法可以用 Windows 的命令解释器来完成同样的构造。
目前上传的一些文件已损坏。它们的文件大小为 0 字节。请问如何查询我的 s3 存储桶并按特定大小过滤,我正在尝试查询字节为 0 时?
目前我有两个问题。
第一个递归列出存储桶中的所有文件,但没有排序。
aws s3 ls s3://testbucketname --recursive --summarize --human-readable
第二种排序,但仅当提供前缀时,在我的例子中,前缀是文件夹名称。我目前的bucket结构如下{accountId}/{filename}
aws s3api list-objects-v2 --max-items 10 --bucket testbucketname --prefix "30265" --query "sort_by(Contents,&Size)"
30265 是 accountId/folder 名称。如果未提供前缀,排序将无法正常工作。
如有任何帮助,我们将不胜感激。
此查询非常适合过滤字符串形式的名称
aws s3api list-objects --bucket testbucketname --query "Contents[?contains(Key, '.jpg')]"
不幸的是,我无法使用 contains 作为 Size,而且没有等号。
您可以使用 --query
逻辑将列表对象本地过滤为仅 zero-byte 大的对象:
aws s3api list-objects-v2 --bucket example-bucket --query 'Contents[?Size==`0`]'
或者,如果您只想查看没有其他键的列表 meta-data,您可以进一步过滤列表:
aws s3api list-objects-v2 --bucket example-bucket --query 'Contents[?Size==`0`].Key'
(对于这两个,当 Windows 上的 运行 时,将外部 '
替换为 "
。)
此外,如果目标是删除这些对象,您可以使用 jq 和子 shell 构造一个删除目标对象的查询:
aws s3api delete-objects --bucket example-bucket --delete \
"$(aws s3api list-objects-v2 --bucket example-bucket --query 'Contents[?Size==`0`].Key' |\
jq '{"Objects": map({"Key":.})}')"
没有直接的方法可以用 Windows 的命令解释器来完成同样的构造。