Utilisez le s3api avec jq (AWS docu aws s3api list-objects) :
Ce mode est toujours récursif.
$ aws s3api list-objects --bucket "bucket" | jq -r '.Contents[].Key'
a.txt
foo.zip
foo/bar/.baz/a
[...]
Vous pouvez filtrer les sous répertoires en ajoutant un préfixe (ici foo
annuaire). Le préfixe ne doit pas commencer par un /
.
$ aws s3api list-objects --bucket "bucket" --prefix "foo/" | jq -r '.Contents[].Key'
foo/bar/.baz/a
foo/bar/.baz/b
foo/bar/.baz/c
[...]
jqOptions :
-r
=Mode brut, pas de guillemets en sortie.Contents[]
=ObtenirContents
Contenu du tableau d'objets.Key
=Obtenir chaque champ clé (ne produit pas de tableau JSON valide, mais nous sommes en mode brut, donc nous nous en fichons)
Avenant :
Vous pouvez utiliser l'AWS CLI pure, mais les valeurs seront séparées par \x09
=Onglet horizontal (AWS :Contrôle de la sortie des commandes à partir de l'AWS CLI - Format de sortie de texte)
$ aws s3api list-objects --bucket "bucket" --prefix "foo/" --query "Contents[].Key" --output text
foo/bar/.baz/a foo/bar/.baz/b foo/bar/.baz/c [...]
Options de l'interface de ligne de commande AWS :
--query "Contents[].Key"
=Query Contents Object Array et obtenir chaque clé à l'intérieur--output text
=Sortie sous forme de texte délimité par des tabulations avec maintenant des citations
Addendum basé sur le commentaire de Guangyang Li :
AWS CLI pur avec nouvelle ligne :
$ aws s3api list-objects --bucket "bucket" --prefix "foo/" --query "Contents[].{Key: Key}" --output text
foo/bar/.baz/a
foo/bar/.baz/b
foo/bar/.baz/c
[...]
Vous ne pouvez pas faire cela avec juste le aws
commande, mais vous pouvez facilement la diriger vers une autre commande pour supprimer la partie que vous ne voulez pas. Vous devez également supprimer le --human-readable
flag pour obtenir une sortie plus facile à utiliser, et le --summarize
drapeau pour supprimer les données récapitulatives à la fin.
Essayez ceci :
aws s3 ls s3://mybucket --recursive | awk '{print $4}'
Edit :pour prendre en compte les espaces dans les noms de fichiers :
aws s3 ls s3://mybucket --recursive | awk '{$1=$2=$3=""; print $0}' | sed 's/^[ \t]*//'
Manière simple
aws s3 ls s3://mybucket --recursive --human-readable --summarize|cut -c 29-
Un filtre simple serait :
aws s3 ls s3://mybucket --recursive | perl -pe 's/^(?:\S+\s+){3}//'
Cela supprimera la date, l'heure et la taille. Ne laisse que le chemin complet du fichier. Cela fonctionne également sans le récursif et devrait également fonctionner avec des noms de fichiers contenant des espaces.