
開発者がコマンドラインからGoogle Cloud Storage (GCS) を操作できるようにした gsutil パッケージ。
複数のファイルをGCPにコピーする場合は gsutil cp コマンドを並列に処理する為に gsutil -m cp src_dir/*.txt gs://my-bucket といった感じで使う。
複数コピーは可能だが、指定したファイルのみ複数コピーするにはどうしたらよいのか。

src_dir/*.txt みたいに指定したらいいんじゃないの?1.txtと2.txtのみコピーしたい場合とか困るわけですよ。


その場合どうするんだろ。
今回はそんな問題を解決するために、「gsutil cpでリストで指定したファイルをコピーする方法」を解説する。
この記事を書いている人

記事を読むメリット
gsutil cpでリストで指定したファイルをコピーする方法

gsutil cpでリストで指定したファイルをコピーする方法、それは -I (アイ)のオプションを使うことだ。
Googleのリファレンスを読むと、 -I (アイ)のオプションを使うと stdin、つまり標準入力を受け付けるようになる。
Unixの cat コマンドでfilelistを読み込んで1行ずつ分解したリストを、パイプで繋いで gsutil -m cp -I に渡すことで、filelistに記載された全てのファイルをコピーすることができる。
You can use the -I option with stdin to specify a list of URLs to copy, one per line. This allows you to use gsutil in a pipeline to upload or download objects as generated by a program:
cat filelist | gsutil -m cp -I gs://my-bucket


srs_dirのフォルダにあるファイル
1.txt 2.txt 3.txt 4.txt 5.txt
filelist.txtの中身
1.txt 2.txt
実行するコマンド
cat filelist.txt | gsutil -m cp -I gs://my-bucket


gsutil cpでリストで指定したファイルをコピーする方法 まとめ

gsutil cpでリストで指定したファイルをコピーするには -I (アイ)のオプションを使って catで読み込んだリストを引数に指定しよう。
cat filelist.txt | gsutil -m cp -I gs://my-bucket
他にもgsutilで"argument list too long"エラーが出てしまう原因と解決方法の記事なんかもあるので、気になったら見て欲しい。
あわせて読みたい




