ls 在 awscli returns "PRE" 中。为什么以及如何摆脱它

ls in awscli returns "PRE". Why and how to get rid of it

在gitbash中使用awscli,命令

aws s3 ls "s3://directory/"

returns列表

PRE "filename"

这很不方便,因为我需要对输出执行进一步的命令,而且我只需要给定目录中的 file/directory 个名称。

例如,如果能够做到:

for dir in $(aws s3 ls s3://directory/) do
 aws s3 ls $dir | grep .json;
done

有什么解决这个问题的建议吗?

你可以用

之类的东西来做到这一点
aws s3 ls s3://directory --recursive | awk '{print }' | grep .json

要列出所有文件夹:

aws s3 ls s3://bkt --recursive | tr -s ' ' | cut -d ' ' -f4- | grep "\/$" | sed 's/\/$//'

列出所有文件:

aws s3 ls s3://bkt --recursive | tr -s ' ' | cut -d ' ' -f4- | grep -v /$

要列出所有 .json 文件:

aws s3 ls s3://bkt --recursive | tr -s ' ' | cut -d ' ' -f4- | grep "\.json$"

列出所有 .json 和所有 .yaml 文件:

aws s3 ls s3://bkt --recursive | tr -s ' ' | cut -d ' ' -f4- | grep -E "(\.yaml|\.json)$"

列出所有文件 除了 .json 文件:

aws s3 ls s3://bkt --recursive | tr -s ' ' | cut -d ' ' -f4- | grep -v "\.json$"

什么是“PRE”?

You can think of prefixes as a way to organize your data in a similar way to directories. However, prefixes are not directories.

如何去掉输出中的“PRE”?

  • 使用支持查询和输出格式的aws s3api list-objects-v2命令代替aws s3 ls命令。
aws s3api list-objects-v2 --bucket <mybucket_name> --prefix <path> --query "Contents[?contains(Key, '.json')].Key"

请注意,这里的 <bucketname> 只是 存储桶的名称。请勿包含 s3:// 或任何其他 /.

--query 参数为您提供强大的输出。

例如

  • --query Contents[].Key 将打印所有密钥。
  • --query Contents[?contains(Key, '.json')].Key 指定 Key 的附加条件(Key 包含 .json(例如扩展名)),然后最后的 .Key 告诉它什么属性json 输出到 return.