"head" Befehl für aws s3 um Dateiinhalte anzuzeigen

7

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.

    
nutsiepully 22.09.2014, 22:01
quelle

5 Antworten

5

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.)

    
Michael Hanisch 22.09.2014, 23:06
quelle
18

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.

    
dspringate 03.05.2016 07:22
quelle
5

Sie können den Schalter range auf die ältere s3api get-object Befehl, um die ersten Bytes eines s3-Objekts zurückzubringen. (AFAICT 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.

    
Ben Hutchison 13.05.2016 01:04
quelle
3

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.

    
Yaniv 22.09.2016 09:40
quelle
0

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.

    
Ben Whaley 22.09.2014 22:57
quelle