2014-09-22 10 views
7

Su Linux, generalmente utilizziamo i comandi head/tail per visualizzare in anteprima il contenuto di un file. Aiuta a visualizzare una parte del file (ad esempio, per esaminare il formato), piuttosto che aprire l'intero file.Comando "head" per aws s3 per visualizzare il contenuto del file

Nel caso di Amazon S3, sembra che ci siano solo ls, cp, mv ecc. commands Volevo sapere se è possibile visualizzare parte del file senza scaricare l'intero file sul mio computer locale utilizzando cp /OTTENERE.

risposta

5

È possibile specificare un intervallo di byte durante il recupero dei dati da S3 per ottenere i primi N byte, gli ultimi N byte o qualsiasi altro valore intermedio. (Questo è anche utile poiché consente di scaricare file in parallelo: è sufficiente avviare più thread o processi, ognuno dei quali recupera parte del file totale.)

Non so quale dei vari strumenti CLI supporta questo direttamente ma un recupero della portata fa quello che vuoi.

Gli strumenti della CLI di AWS ("aws s3 cp" per la precisione) non consentono di eseguire il recupero dell'intervallo ma s3curl (http://aws.amazon.com/code/128) dovrebbe fare il trucco. (Quindi, l'arricciatura semplice, ad esempio, utilizzando il parametro --range ma poi si dovrà fare la richiesta di firma per conto proprio)

+1

Vedi http://docs.aws.amazon.com/AmazonS3/latest/dev/GettingObjectsUsingAPIs.html su come implementarlo tu stesso utilizzando vari SDK AWS. –

+0

Grazie. Userò solo s3curl. Il caso d'uso sembra abbastanza comune per essere supportato però. – nutsiepully

0

Non esiste tale capacità. È possibile recuperare solo l'intero oggetto. È possibile eseguire un HTTP HEAD request per visualizzare i metadati dell'oggetto, ma non è quello che stai cercando.

+0

Grazie. Questo non ha senso però. O credo che aiuti solo la fatturazione in rete. – nutsiepully

+0

@nutsiepully La risposta di Michael Hanisch è migliore della mia dato che offre una soluzione, dovresti invece accettare la sua! –

+0

Grazie per essere così gentile. Ho pensato di farlo, ma non ero sicuro :-) – nutsiepully

16

una cosa che potreste fare è cp l'oggetto corpulento e poi pipe a testa:.

aws s3 cp s3://path/to/my/object - | head 

si ottiene un errore di tubo rotto alla fine, ma funziona.

+3

Questo è eccellente! – Yavar

5

È possibile utilizzare lo switch range per il precedente comando s3api get-object per riportare i primi byte di un oggetto s3. (AFAICT s3 non supporta l'interruttore.)

Il tubo \dev\stdout può essere passato come il nome del file di destinazione se si desidera semplicemente visualizzare l'oggetto S3 con un tubo a head. Ecco un esempio:

aws s3api get-object --bucket mybucket_name --key path/to/the/file.log --range bytes=0-10000 /dev/stdout | head

Infine, se come me hai a che fare con .gz file compressi, la tecnica di cui sopra funziona anche con zless che vi permetterà di visualizzare il capo del file decompresso:

aws s3api get-object --bucket mybucket_name --key path/to/the/file.log.gz --range bytes=0-10000 /dev/stdout | zless

Un consiglio con zless: se non funziona, aumentare la dimensione dell'intervallo.

2

Se non si desidera scaricare l'intero file, è possibile scaricare una parte di esso con l'opzione --range specificato nel comando aws s3api e dopo la parte file viene scaricato, quindi eseguire un comando head su quel file.

Esempio:

aws s3api get-object --bucket my_s3_bucket --key s3_folder/file.txt --range bytes=0-1000000 tmp_file.txt && head tmp_file.txt 

Spiegazione:

Il aws s3api get-object scarica un porzione del file s3 dalla cartella secchio e s3 specificato con il determinate dimensioni --range ad un file di output specificato. Il && esegue il secondo comando solo se il primo è riuscito. Il secondo comando stampa la prima riga del file di output creato in precedenza.

Problemi correlati