たまたまgzファイルを一つにまとめる(=コンカチする)必要があったのでやってみました。
読み込んだ時にバイナリーで扱ってるんで、そのまま書いてしまえばいいから簡単ですね。
準備
ファイル
こんな感じの適当なファイルを用意しました。
cat aaaaa.txt aaaaaaaaaa AAAAAAAAAA 1111111111
cat bbbbb.txt bbbbbbbbbb BBBBBBBBBB 2222222222
cat ccccc.txt cccccccccc CCCCCCCCCC 3333333333
それをそれぞれgzipに固めておきます。
gzip aaaaa.txt gzip bbbbb.txt gzip ccccc.txt
ls aaaaa.txt.gz bbbbb.txt.gz ccccc.txt.gz
このgzファイルをtest_dirに入れておきます。
フォルダ構成
実行する前にフォルダ構成を提示しておきます。
pack_gz_files.go test_dir aaaaa.txt.gz bbbbb.txt.gz ccccc.txt.gz
実行スクリプト
goのコード
pack_gz_files.go
concatenate gz files
os.OpenFile
https://golang.org/pkg/os/#OpenFile
func OpenFile(name string, flag int, perm FileMode) (*File, error)
ファイルのポインタが取得できます。
ReadFile
https://golang.org/pkg/io/ioutil/#ReadFile
func ReadFile(filename string) ([]byte, error)
読み込んだファイルはバイト型で返されます。
(*File) Write
https://golang.org/pkg/os/#File.Write
func (f *File) Write(b []byte) (n int, err error)
読み込んだバイトデータを引数にそのままバイト型を与えればいいわけですね。
実行
go run pack_gz_files.go test_dir
実行結果
実行すると output.txt.gzができます。
それを解凍してみると...。
gunzip output.txt.gz cat output.txt aaaaaaaaaa AAAAAAAAAA 1111111111 bbbbbbbbbb BBBBBBBBBB 2222222222 cccccccccc CCCCCCCCCC 3333333333
うまくコンカチされてますね。