GNU/Linux >> Tutoriels Linux >  >> Linux

Comment afficher uniquement les fichiers de la commande aws s3 ls ?

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[] =Obtenir Contents 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.


Linux
  1. Comment renommer des fichiers sous Linux

  2. Comment supprimer des fichiers et des répertoires sous Linux à partir de la ligne de commande

  3. Comment exclure certaines tailles de fichiers de la copie sous Linux

  4. Sur quels systèmes //foo/bar est-il différent de /foo/bar ?

  5. Est-ce que Rsync ~/foo Target/foo est identique à Rsync ~/foo/ Target/foo/?

Comment extraire ou décompresser des fichiers tar.gz à partir de la ligne de commande Linux

Comment rechercher des fichiers à partir du terminal sous Linux

Comment rechercher des fichiers à partir de la ligne de commande Linux

Comment afficher des fichiers gif dans Ubuntu Terminal

Comment afficher deux fichiers côte à côte sous Linux

Comment exécuter la commande SUDO dans WinSCP pour transférer des fichiers de Windows vers Linux