用于aws s3查看文件内容的"head"命令

nut*_*lly 21 unix amazon-s3 amazon-web-services

在Linux上,我们通常使用head/tail命令来预览文件的内容.它有助于查看文件的一部分(例如检查格式),而不是打开整个文件.

在Amazon S3的情况下,似乎只有ls,cp,mv等命令我想知道是否可以查看部分文件而无需使用cp/GET在本地计算机上下载整个文件.

dsp*_*ate 57

你可以做的一件事是将对象变为粗壮,然后将其传递到头部:

aws s3 cp s3://path/to/my/object - | head
Run Code Online (Sandbox Code Playgroud)

最后你得到一个破损的管道错误,但它有效.

  • [将此与 Aswath K 的解决方案相结合] 对于 gzip 文件: `aws s3 cp s3://path/to/my/object - | gzip-d-| 头-5` (4认同)

小智 8

从S3中检索数据时,可以指定字节范围,以获取前N个字节,最后N个字节或其间的任何内容.(这也很有用,因为它允许您并行下载文件 - 只需启动多个线程或进程,每个线程或进程都会检索整个文件的一部分.)

我不知道哪种CLI工具直接支持这一点,但范围检索可以满足您的需求.

AWS CLI工具(准确地称为"aws s3 cp")不允许您进行范围检索,但s3curl(http://aws.amazon.com/code/128)应该可以做到这一点.(简单的卷曲,例如,使用--range参数,但您必须自己进行请求签名.)


Ben*_*son 8

您可以使用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:如果它不工作,请尝试增加范围的大小.


Asw*_*h K 6

如果您使用 s3cmd,则可以使用s3cmd get并写入 stdout 并将其通过管道传输到 head,如下所示:

s3cmd get s3://bucket/file - | head
Run Code Online (Sandbox Code Playgroud)

如果要查看 gzip 文件的头部,请通过管道将 stdout 传送到gzip -d -和 头部:

s3cmd get s3://bucket/file - | gzip -d - | head
Run Code Online (Sandbox Code Playgroud)

如果您对这种管道业务感到厌倦,请将以下脚本添加到您的~/.bashrc

function s3head {
    s3_path=${@:$#}
    params=${@:1:$# - 1}
    s3cmd get $s3_path - | zcat -f | head $params
}
Run Code Online (Sandbox Code Playgroud)

现在获取~/.bashrc文件。

只需运行s3head s3://bucket/file即可获得文件的前 10 行。

这甚至支持其他head命令参数。

例如,如果您想要更多行,只需指定 -n 后跟行数,如下所示:

# Prints the first 14 lines of s3://bucket/file
s3head -n 14 s3://bucket/file
Run Code Online (Sandbox Code Playgroud)

以下是 s3 的一些其他实用程序脚本:https://github.com/aswathkk/dotfiles/blob/master/util_scripts/s3utils.sh


小智 5

如果不想下载整个文件,则可以使用命令中--range指定的选项aws s3api下载文件的一部分,然后在下载文件部分之后,对该文件运行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
Run Code Online (Sandbox Code Playgroud)

说明:

aws s3api get-object下载在从指定的桶和s3文件夹与所述指定大小的S3文件的一部分--range给一个指定的输出文件。在&&执行只有当第一个成功的第二个命令。第二个命令显示先前创建的输出文件的第一行的第10行。