Unter Linux verwenden wir in der Regel die head / tail-Befehle, um den Inhalt einer Datei in der Vorschau anzuzeigen. Es hilft beim Anzeigen eines Teils der Datei (z. B. um das Format zu prüfen), anstatt die gesamte Datei zu öffnen.
Im Falle von Amazon S3 scheint es nur ls, cp, mv usw. zu geben. commands Ich wollte wissen, ob es möglich ist, einen Teil der Datei zu betrachten, ohne die gesamte Datei auf meinem lokalen Rechner mit cp / GET herunterzuladen.
Sie können einen Bytebereich angeben, wenn Sie Daten von S3 abrufen, um die ersten N Bytes, die letzten N Bytes oder irgendetwas dazwischen zu erhalten. (Dies ist auch hilfreich, da Sie Dateien parallel herunterladen können - starten Sie einfach mehrere Threads oder Prozesse, von denen jeder einen Teil der gesamten Datei abruft.)
Ich weiß nicht, welche der verschiedenen CLI-Tools dies direkt unterstützt, aber eine Bereichsabfrage funktioniert genau so, wie Sie es wollen.
Mit den AWS CLI-Tools ("aws s3 cp", um genau zu sein) können Sie keine Bereichsabfrage durchführen, aber s3curl ( Ссылка ) sollte den Trick machen. (So ist zum Beispiel curl, zB mit dem Parameter --range, aber dann müssten Sie die Anfrage selbst signieren.)
Eine Sache, die Sie tun können, ist cp das Objekt zu stout und dann pipe es zum Kopf:
%Vor%Am Ende erhalten Sie einen gebrochenen Rohrfehler, aber es funktioniert.
Sie können den Schalter range
auf die ältere s3api get-object
s3
unterstützt den Switch nicht.)
Die Pipe \dev\stdout
kann als Zieldateiname übergeben werden, wenn Sie einfach das S3-Objekt anzeigen möchten, indem Sie an head
überleiten. Hier ist ein Beispiel:
aws s3api get-object --bucket mybucket_name --key path/to/the/file.log --range bytes=0-10000 /dev/stdout | head
Wenn Sie wie ich mit komprimierten .gz
-Dateien arbeiten, funktioniert die obige Technik auch mit zless
, damit Sie den Kopf der dekomprimierten Datei anzeigen können:
aws s3api get-object --bucket mybucket_name --key path/to/the/file.log.gz --range bytes=0-10000 /dev/stdout | zless
Ein Tipp mit zless
: Wenn es nicht funktioniert, versuche die Größe des Bereichs zu erhöhen.
Wenn Sie nicht die gesamte Datei herunterladen möchten, können Sie einen Teil davon mit der herunterladen --range
Option, die im Befehl aws s3api
angegeben wurde, und nachdem der Dateiabschnitt heruntergeladen wurde, führen Sie dann einen head
-Befehl für diese Datei aus.
Beispiel:
%Vor%Erläuterung:
Der aws s3api get-object
lädt einen Teil der s3-Datei aus dem angegebenen Bucket und s3-Ordner mit der angegebenen Größe in --range
zu einer angegebenen Ausgabedatei.
Der &&
führt den zweiten Befehl nur aus, wenn der erste erfolgreich war.
Der zweite Befehl gibt die erste Zeile der zuvor erstellten Ausgabedatei aus.
Es gibt keine solche Fähigkeit. Sie können nur das gesamte Objekt abrufen. Sie können eine HTTP HEAD-Anfrage ausführen, um Objektmetadaten anzuzeigen, aber das ist nicht was Sie suchen.
Tags und Links amazon-s3 amazon-web-services unix