2014-09-22 88 views
7

在Linux上,我們通常使用head/tail命令來預覽文件的內容。它有助於查看文件的一部分(例如檢查格式),而不是打開整個文件。aws s3查看文件內容的「head」命令

對於Amazon S3,似乎只有ls,cp,mv等。commands我想知道是否可以查看部分文件,而無需使用cp在本地計算機上下載整個文件/得到。

回答

5

從S3中檢索數據時,您可以指定一個字節範圍,以獲取前N個字節,最後N個字節或之間的任何內容。 (這也很有幫助,因爲它允許您並行下載文件 - 只需啓動多個線程或進程,每個線程或進程都會檢索整個文件的一部分。)

我不知道哪種CLI工具支持這種直接,但範圍檢索做你想要的。

AWS CLI工具(確切地說是「aws s3 cp」)不允許您執行範圍檢索,但s3curl(http://aws.amazon.com/code/128)應該做到這一點(平滑捲曲,例如使用--range參數但你必須做你自己的要求籤字)

+1

請參閱http://docs.aws.amazon.com/AmazonS3/latest/dev/GettingObjectsUsingAPIs.html,瞭解如何使用各種AWS開發工具包自行實現此功能。 – 2014-09-22 23:07:31

+0

謝謝。我只會使用s3curl。儘管如此,用例看起來很普遍。 – nutsiepully 2014-09-22 23:15:49

0

沒有這樣的能力。您只能檢索整個對象。您可以執行HTTP HEAD request來查看對象元數據,但這不是您要查找的內容。

+0

謝謝。那雖然沒有意義。或者我想這只是幫助他們的網絡計費。 – nutsiepully 2014-09-22 22:59:55

+0

@nutsiepully Michael Hanisch的答案比我的答案好,因爲它提供了一個解決方案,你應該接受他的方法! – 2014-09-23 00:09:12

+0

感謝您的優雅。我想過這樣做,但不知道:-) – nutsiepully 2014-09-23 01:05:59

16

有一兩件事你可以做的是CP的對象粗壯,然後將其管頭:

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

你得到一個破裂的管道錯誤在最後,但它的工作。

+3

這很棒! – Yavar 2016-06-22 23:29:40

5

您可以使用range切換到舊的s3api get-object命令來恢復s3對象的第一個字節。 (AFAICT s3不支持開關。)

\dev\stdout可以作爲目標的文件名被傳遞,如果你只是想通過管道以查看S3對象head。這裏有一個例子:

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

最後,如果你像我一樣正在處理壓縮.gz文件中,上述技術還與zless允許您查看解壓縮文件的頭:

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

zless一個提示:如果它不工作嘗試增加範圍的大小。

2

如果你不想下載整個文件,你可以下載它的一部分與在aws s3api命令和文件部分被下載之後指定的--range選項,然後運行在該文件中的head命令。

實施例:

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

說明:

aws s3api get-object下載從與一個指定的尺寸的指定的桶和s3文件夾中的--range S3文件的一個指定的輸出文件的部分。 僅當第一個命令成功時,&&纔會執行第二個命令。 第二個命令打印先前創建的輸出文件的第一行。