開発者がコマンドラインから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"エラーが出てしまう原因と解決方法の記事なんかもあるので、気になったら見て欲しい。
あわせて読みたい