LoginSignup
4
2

More than 3 years have passed since last update.

aws s3 cp コマンドでファイル結合する

Last updated at Posted at 2020-08-05

s3に置いてあるファイルについて、複数ファイルをまとめたい時があります。
ファイルをダウンロードせずにファイル結合をできないものかとやってみました。

結論から言うと cp の標準入力と標準出力を駆使してみました。

aws s3 cp - s3://... : 標準入力から書き込める
aws s3 cp s3://... - : 標準出力から表示できる

こちらのclassmethod様の記事を大いに参考にさせていただいております。
https://dev.classmethod.jp/articles/aws-cli-s3-streaming/

以降にサンプルコードを書いたので参考にしてみてください。

サンプルファイル

分割されたファイルとしてこのようなファイルがあるとします。

aaa.text
aaa
aaa
aaa

bbb.txt
bbb
bbb
bbb

ccc.txt
ccc
ccc
ccc

上記のファイルが下記にあるとします。

aws s3 ls s3://hoge.bucket/concatenate_test/
2020-08-05 18:44:01         12 aaa.txt
2020-08-05 18:44:10         12 bbb.txt
2020-08-05 18:44:18         12 ccc.txt

ファイル結合

そんでこんなシェルスクリプトを実行してみます。

#!/bin/bash
(
aws s3 cp s3://hoge.bucket/concatenate_test/aaa.txt -;
aws s3 cp s3://hoge.bucket/concatenate_test/bbb.txt -;
aws s3 cp s3://hoge.bucket/concatenate_test/ccc.txt -;
) | aws s3 cp - s3://hoge.bucket/concatenate_test/abc.txt

中身を見てみると結合できてます。

aws s3 cp s3://hoge.bucket/concatenate_test/abc.txt - 
aaa
aaa
aaa
bbb
bbb
bbb
ccc
ccc
ccc

ファイル結合して圧縮

それでは圧縮しながらコンカチもやってみます。

#!/bin/bash
(
aws s3 cp s3://hoge.bucket/concatenate_test/aaa.txt -;
aws s3 cp s3://hoge.bucket/concatenate_test/bbb.txt -;
aws s3 cp s3://hoge.bucket/concatenate_test/ccc.txt -;
) | gzip | aws s3 cp - s3://hoge.bucket/concatenate_test/abc.txt.gz
aws s3 cp s3://hoge.bucket/concatenate_test/abc.txt.gz - | zcat
aaa
aaa
aaa
bbb
bbb
bbb
ccc
ccc
ccc

圧縮ファイルをファイル結合

もともとのファイルがgz圧縮されていればそのままパイプしてしまえばいですね。

#!/bin/bash
(
aws s3 cp s3://hoge.bucket/concatenate_test/aaa.txt.gz - ;
aws s3 cp s3://hoge.bucket/concatenate_test/bbb.txt.gz - ;
aws s3 cp s3://hoge.bucket/concatenate_test/ccc.txt.gz - ;
) | aws s3 cp - s3://hoge.bucket/concatenate_test/abc.txt.gz
4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2