Sous Linux, nous utilisons généralement les commandes head/tail pour prévisualiser le contenu d'un fichier. Cela aide à visualiser une partie du fichier (pour inspecter le format par exemple), plutôt que d'ouvrir tout le fichier.
Dans le cas d'Amazon S3, il semble qu'il n'y ait que ls, cp, mv etc. commandes Je voulais savoir s'il est possible d'afficher une partie du fichier sans télécharger l'intégralité du fichier sur ma machine locale à l'aide de cp /OBTENIR.
Vous pouvez spécifier une plage d'octets lors de l'extraction de données de S3 pour obtenir les N premiers octets, les derniers N octets ou tout autre élément intermédiaire. (Ceci est également utile car il vous permet de télécharger des fichiers en parallèle - démarrez simplement plusieurs threads ou processus, chacun récupérant une partie du fichier total.)
Je ne sais pas lequel des différents outils CLI prend en charge cette fonctionnalité directement, mais une récupération de plage fait ce que vous voulez.
Les outils de l'AWS CLI ("aws s3 cp" pour être précis) ne vous permettent pas de récupérer des plages, mais s3curl ( http://aws.Amazon.com/code/128 ) devrait suffire. utilise simplement le paramètre --range mais vous devrez alors signer vous-même la requête.)
Une chose que vous pouvez faire est de cp l’objet à stout puis de le diriger vers la tête:
aws s3 cp s3://path/to/my/object - | head
Vous obtenez une erreur de tuyau cassé à la fin mais cela fonctionne.
Vous pouvez utiliser le commutateur range
sur l'ancienne commande s3api get-object
pour récupérer les premiers octets d'un objet s3. (AFAICT s3
ne prend pas en charge le commutateur.)
Le tube \dev\stdout
peut être passé en tant que nom de fichier cible si vous souhaitez simplement afficher l'objet S3 en effectuant un transfert vers head
. Voici un exemple:
aws s3api get-object --bucket mybucket_name --key path/to/the/file.log --range bytes=0-10000 /dev/stdout | head
Enfin, si comme moi vous traitez avec des fichiers .gz
compressés, la technique ci-dessus fonctionne également avec zless
, ce qui vous permet d'afficher la tête du fichier décompressé:
aws s3api get-object --bucket mybucket_name --key path/to/the/file.log.gz --range bytes=0-10000 /dev/stdout | zless
Un conseil avec zless
: si cela ne fonctionne pas, essayez d’augmenter la taille de la plage.
Si vous ne souhaitez pas télécharger l'intégralité du fichier, vous pouvez en télécharger une partie à l'aide de l'option --range
spécifiée dans la commande aws s3api
. Une fois la partie du fichier téléchargée, exécutez une commande head
sur ce fichier.
Exemple:
aws s3api get-object --bucket my_s3_bucket --key s3_folder/file.txt --range bytes=0-1000000 tmp_file.txt && head tmp_file.txt
Explication:
Le aws s3api get-object
télécharge une partie du fichier s3 du compartiment et du dossier s3 spécifiés avec la taille spécifiée dans --range
dans un fichier de sortie spécifié. Le &&
exécute la deuxième commande uniquement si la première a successed. La deuxième commande affiche les 10 premières lignes du fichier de sortie créé précédemment.
Il n'y a pas une telle capacité. Vous ne pouvez récupérer que l'objet entier. Vous pouvez exécuter une requête HTTP HEAD pour afficher les métadonnées de l'objet, mais ce n'est pas ce que vous recherchez.
Un moyen facile à faire est de: -
aws s3api get-object --bucket bucket_name --key path/to/file.txt --range bytes=0-10000 /path/to/local/t3.txt | cat t3 | head -100
Pour le fichier gz, vous pouvez faire
aws s3api get-object --bucket bucket_name --key path/to/file.gz --range bytes=0-10000 /path/to/local/t3 | zless t3 | head -100
Si les données sont en baisse, augmentez le nombre d'octets requis