s5cmd, 并行S3和本地 文件系统 执行工具

分享于 

12分钟阅读

GitHub

  繁體 雙語
Parallel S3 and local filesystem execution tool.
  • 源代码名称:s5cmd
  • 源代码网址:http://www.github.com/peakgames/s5cmd
  • s5cmd源代码文档
  • s5cmd源代码下载
  • Git URL:
    git://www.github.com/peakgames/s5cmd.git
    Git Clone代码到本地:
    git clone http://www.github.com/peakgames/s5cmd
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/peakgames/s5cmd
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    

    MIT LicenseTaggodocGo Report

    s5cmd

    这是并行的S3和本地 文件系统 执行工具。

    demo1

    demo2

    安装

    你将需要到 1.7 + 安装 s5cmd

    
    go get -u github.com/peakgames/s5cmd
    
    
    
    

    这将在你的$GOPATH/bin 目录中安装 s5cmd

    使用 Homebrew 插件:

    
    brew tap peakgames/s5cmd https://github.com/peakgames/s5cmd
    
    
    brew install s5cmd
    
    
    
    

    shell-自动完成

    Bash和 zsh shell 完成被支持,利用 posener/complete。 工具和子命令参数,本地文件/目录,以及远程( S3 ) 桶和对象。

    要启用自动完成,请运行:

    
    s5cmd -cmp-install
    
    
    
    

    这将在 .bashrc 或者 .zshrc 文件中添加几行( 取决于配置)。 安装后,运行 source. bashrc ( 或者重新启动 shell ) 以激活更改。

    示例

    使用 shell 自动补全,请使用 shell CLI上的<tab> 键。 如果有多个匹配,直到第二个 <tab> 被击中,就会发生什么,然后将显示选项。 例如:

    
    s5cmd <tab> # This is going to list commands and general parameters
    
    
    s5cmd -n<tab> # This will autocomplete to"s5cmd -numworkers"
    
    
    s5cmd -numworkers <tab><tab> # This will recommend some values for numworkers
    
    
    s5cmd ls <tab><tab> # This will recommend options for the"ls" command or an"s3://" prefix
    
    
    s5cmd ls s3://<tab><tab> # This will get a bucket list from S3
    
    
    s5cmd ls s3://my-buck<tab> # This will complete this to"s3://my-bucket"
    
    
    
    # These commands below will recommend up to 20 S3 objects or complete if there's only one match:
    
    
    s5cmd ls s3://my-bucket/<tab><tab>
    
    
    s5cmd ls s3://my-bucket/my-prefix/<tab><tab>
    
    
    s5cmd ls s3://my-bucket/my-prefix/some-object<tab>
    
    
    
    

    用法

    
    $./s5cmd
    
    
    
    Usage: s5cmd [OPTION]... [COMMAND [PARAMS...]]
    
    
    
    Options:
    
    
     -cmp-install
    
    
     Install shell completion
    
    
     -cmp-uninstall
    
    
     Uninstall shell completion
    
    
     -ds int
    
    
     Multipart chunk size in MB for downloads (default 50)
    
    
     -dw int
    
    
     Download concurrency (single file) (default 5)
    
    
     -f string
    
    
     Commands-file or - for stdin
    
    
     -gops
    
    
     Initialize gops agent
    
    
     -install
    
    
     Install completion for s5cmd command
    
    
     -numworkers int
    
    
     Number of worker goroutines. Negative numbers mean multiples of the CPU core count. (default 256)
    
    
     -r int
    
    
     Retry S3 operations N times before failing (default 10)
    
    
     -stats
    
    
     Always print stats
    
    
     -us int
    
    
     Multipart chunk size in MB for uploads (default 50, auto calculated)
    
    
     -uw int
    
    
     Upload concurrency (single file) (default 5)
    
    
     -version
    
    
     Prints current version
    
    
    
    Commands:
    
    
    !, cp, du, exit, get, ls, mv, rm
    
    
    
    To get help on a specific command, run"s5cmd <command> -h"
    
    
    
    

    命令文件

    s5cmd最强大的功能是命令文件。 数以千计的S3和 文件系统 命令在文件( 或者只是从另一个进程中进入) 中声明,它们是使用多个并行worker执行的。 由于只启动了一个程序,因此避免了数千个不必要的叉执行调用。 这样S3执行时间可以达到每秒几千次操作。

    请参阅:嵌套命令

    单个命令调用

    s5cmd [command [params]] 语法也支持单个命令。

    支持命令

    有三个主要命令: cpmvrm。 参数可以是 S3 url。S3通配符。本地文件/目录引用或者本地全局模式。

    • 复制,下载或者上传: cp [options] [src] [dst]
    • 移动,下载或者上载,然后删除: mv [options] [src] [dst]
    • 删除:rm [src]
    • 计算对象并确定总大小: du [src]
    • 任意shell执行- commands...!
    • Exit - exit [exitcode] ( 请参见退出代码 )

    命令选项

    • S3 url的格式应该是 s3://bucket/key
    • 如果大小相等或者相同,则 cpmv 命令接受 -n ( 无 clobber ) 选项以防止覆盖现有文件或者对象,-s 选项匹配源目标文件大小,跳过上载,如果目标是更新的或者相同的,则跳过上载。 如果合并这些选项,只有在满足所有指定条件时,才会跳过覆盖。
    • 上传 cpmv 命令可以接受 -rr-ia 选项,以减少冗余的冗余和不常见的访问模式。
    • 批处理 cpmv 命令也接受 --parents 选项以在目标中创建dir结构。 Dir结构是从第一个通配符创建的。
    • 批处理 local-to-local cpmv 命令也接受用于递归操作的-R 选项。
    • ls 命令接受 -e 选项以显示列表中的etag。
    • du 命令只接受S3参数( 前缀或者通配符)
    • lsdu 命令都接受 -H 选项来显示人类可读的对象大小。
    • du 命令还接受 GROUP BY 存储类的-g 选项。

    命令示例

    
    cp s3://from-bucket/from-key s3://to-bucket/[to-key] # Copy object in S3 
    
    
    mv s3://from-bucket/from-key s3://to-bucket/[to-key] # Move object in S3
    
    
    rm s3://del-bucket/del-key # Delete S3 object
    
    
    cp/path/to/src/file/path/to/dest[/] # Copy local file
    
    
    mv/path/to/src/file/path/to/dest[/] # Move local file
    
    
    cp s3://from-bucket/from-key/path/to/dest[/] # Download from S3
    
    
    rm/path/to/del # Delete local file or (empty) directory
    
    
    ls # List buckets
    
    
    ls s3://bucket[/prefix] # List objects in bucket
    
    
    cp/path/to/src s3://to-bucket/to-key[/] # Upload to S3
    
    
    cp/path/to/src/dir/s3://to-bucket/to-prefix/# Upload directory to S3
    
    
    cp/path/to/src/*.go s3://to-bucket/to-prefix/# Upload glob to S3
    
    
    
    

    Wild

    S3操作支持多个级别的通配符。 这是通过列出前缀的所有S3对象来实现的,然后在内存中筛选结果。 IE。对于批处理下载,首先将 ls 调用转换成单独的命令并并行执行。

    批API用于删除多个S3对象,因此可以通过一次调用来删除 1000个S3对象。

    操作示例

    
    ls s3://bucket/prefix/*/file*gz # Wild-list objects in bucket
    
    
    cp s3://from-bucket/prefix/*/file*gz/path/to/dest/# Wild-download from S3
    
    
    mv s3://from-bucket/prefix/*/file*gz/path/to/dest/# Wild-download from S3, followed by delete
    
    
    rm s3://from-bucket/prefix/*/file*gz # Wild-delete S3 objects (Batch-API)
    
    
    
    

    提示

    • 注释以空格开始,后面跟 #,如 in # 这是一个注释"
    • 空行也可以
    • -numworkers -1 意味着使用 runtime.NumCPU goroutines。 -2 表示 2*runtime.NumCPU 等等。
    • S3节流错误 SlowDown 指数重试。 SDK"根据 AWS SDK ( 当前 RequestErrorRequestError ) 指定) 重试Retryable操作。

    嵌套命令( 基本)

    可以使用 &&|| 操作符指定成功和失败命令。 解析器非常简单,不支持多个级别嵌套命令( 根据结果的结果做某事)。

    如果要在 s3 buckets移动对象,然后如果成功删除本地文件,则可以执行以下操作:

    
    mv s3://source-bkt/key s3://dest-bkt/key && rm/path/to/key
    
    
    
    

    这也是有效的:

    
    mv a b/||! touch could-not-move # This is a comment
    
    
    
    

    这也是:

    
    ! touch a &&! touch a-touched ||! touch a-couldnotbetouched
    
    
    
    

    证书

    可以通过多种方式提供S3凭据。

    环境变量

    使用 环境变量 提供完整的S3凭据:

    
    AWS_ACCESS_KEY_ID=YOURKEY AWS_SECRET_ACCESS_KEY=ohnosecret AWS_REGION=us-east-1./s5cmd ls
    
    
    
    
    证书文件

    使用 $HOME/.aws/credentials file:

    
    [default]
    
    
    aws_access_key_id = YOURKEY
    
    
    aws_secret_access_key = ohnosecret
    
    
    region = us-east-1
    
    
    
    

    然后运行 s5cmd:

     
    ./s5cmd ls
    
    
    
     

    若要使用不同的配置文件,请设置 AWS_PROFILE 环境变量。 有关更多选项,请参见页面。

    输出

    常规输出格式如下:

    
    DATE TIME Short-Msg Detailed-Msg
    
    
    
    
    • 琐碎的消息以 # 开头,如worker数或者退出代码和统计信息
    • +OK 用于成功操作: +OK"! touch touch-this-file"
    • -ERR 用于失败操作: -ERR"! touche": executable file not found in $PATH
    • 自动气象站相关错误( ?SlowDown?InternalError 等)的?ErrorCode

    项输出( 在 ls 中使用) 稍有不同: 省略 DATE TIME 字段,短的msg是单个 + 字符。

    shell 输出( 在 中使用) 不修改命令的执行输出。! stdoutstderr 都被镜像。

    退出代码

    如果出现失败的作业,则进程退出,代码为 127。 这可以用 exit 命令覆盖,但是在这种情况下,完成作业列表是不保证的。

    环境变量

    S5CMD_GOPS 设置为始终启用 gops 代理。

    支持平台

    • 在Linux和 macOS 上测试 s5cmd。 应该在 Windows 上工作,但不能在发布时进行测试。
    • 支持 1.8和向上。
    • 在生产环境中使用是可以的。 ( 对于我们来说很适合 --,但是总是在尝试新工具,请注意)

    文件  tool  PAR  files  LOC  Local  
    相关文章