search
LoginSignup
3

More than 3 years have passed since last update.

posted at

Organization

gsutil、aws s3での基本的なファイル操作(Google Cloud Storage、S3)

aws s3コマンドはS3しか操作できませんが、Google Cloud Storage(GCS)のCLIであるgsutilコマンドはGCSだけでなくS3に対しても同じように操作できます。

ファイルのアップロード(ローカルからクラウド)

$ gsutil cp dir/foo.txt gs://xxx-bucket/dir/
$ gsutil cp dir/foo.txt s3://yyy-bucket/dir/
$ aws s3 cp dir/foo.txt s3://yyy-bucket/dir/

g3://xxx-bucket/dir/foo.txtまたはs3://yyy-bucket/dir/foo.txtにファイルができます

ローカルでのパイプからのアップロード

$ cat dir/foo.txt | gsutil cp - gs://xxx-bucket/dir/foo.txt
$ cat dir/foo.txt | gsutil cp - s3://yyy-bucket/dir/foo.txt
$ cat dir/foo.txt | aws s3 cp - s3://yyy-bucket/dir/foo.txt

※Google Cloud Storage上でContent-Typeがapplication/octed-streamになってしまう
※コピー先はファイル名まで指定が必要

gsutil cpaws s3 cp-は標準入力の意味です。

いずれの方法でもアップロード先に指定のディレクトリがない場合は自動で作られるかのように振る舞います。

正確にはGoogle Cloud StorageもS3もオブジェクトストレージで、ファイルシステムとは異なり、ディレクトリもしくはフォルダの概念は本来はありません。以下の記事がわかりやすいです。

Amazon S3における「フォルダ」という幻想をぶち壊し、その実体を明らかにする | Developers.IO

Google Cloud StorageのファイルのContent-Typeを変更するには以下のようにします。

$ gsutil setmeta -h "Content-Type:text/plain" gs://xxx-bucket/dir/foo.txt

-hオプションはgsのファイルパスよりも先に指定する必要あり

コピー時にContent-Typeを指定するには以下のようにします。

$ cat dir/foo.txt | gsutil -h "Content-Type:text/plain" cp - gs://xxx-bucket/dir/foo.txt

-hオプションはcpよりも前に指定する必要あり

ファイルの一覧表示(ローカルおよびクラウド)

$ ls -l dir/
$ gsutil ls -l gs://xxx-bucket/dir/
$ gsutil ls -l s3://yyy-bucket/dir/
$ aws s3 ls s3://yyy-bucket/dir/

aws s3コマンドには-lオプションがありません

参考
gsutil lsはS3にも対応している件
Google Cloud StorageとAWS S3との間でファイルをコピーするには

ファイルの表示(ローカルおよびクラウド)

プレーンテキストのファイルをターミナル上に表示する方法です。ローカルのファイルに対するcatコマンドに相当するものです。

$ cat dir/foo.txt
$ gsutil cp gs://xxx-bucket/dir/foo.txt -
$ gsutil cp s3://yyy-bucket/dir/foo.txt -
$ aws s3 cp s3://yyy-bucket/dir/foo.txt -

gsutil cpaws s3 cp-は標準出力の意味です。

ファイルのダウンロード(クラウドからローカル)

$ gsutil cp gs://xxx-bucket/dir/foo.txt dir/
$ gsutil cp s3://yyy-bucket/dir/foo.txt dir/
$ aws s3 cp s3://yyy-bucket/dir/foo.txt dir/

ファイル名の変更(ローカルおよびクラウド)

$ mv dir/foo.txt dir/bar.txt
$ gsutil mv dir/foo.txt dir/bar.txt
$ gsutil mv gs://xxx-bucket/dir/foo.txt gs://xxx-bucket/dir/bar.txt
$ gsutil mv s3://yyy-bucket/dir/foo.txt s3://yyy-bucket/dir/bar.txt
$ aws s3 mv s3://yyy-bucket/dir/foo.txt s3://yyy-bucket/dir/bar.txt

gsutil mvはGoogle Cloud Storage(GCS)だけでなくS3やローカルのファイルの名前も変更できます。

また、gsutil mvはローカルからGCS、GCSからローカル、GCSの異なるバケット間、ローカルからS3、S3からローカル、S3の異なるバケット間、GCSからS3、S3からGCSの移動もできます。

aws s3 mvはローカルからS3、S3からローカル、S3の異なるバケット間の移動もできます。

ファイルの削除(ローカルおよびクラウド)

$ rm dir/foo.txt
$ gsutil rm gs://xxx-bucket/dir/foo.txt
$ gsutil rm s3://yyy-bucket/dir/foo.txt
$ aws s3 rm s3://yyy-bucket/dir/foo.txt

Google Cloud StorageもS3もファイルシステムではなくオブジェクトストレージなので、dir/foo.txtを削除した結果、dirの中に1つもオブジェクトがなくなればdir自体も自動で削除されるかのように振る舞います。

ディレクトリの容量確認(ローカルおよびクラウド)

$ du -sh dir/
$ gsutil du -sh gs://xxx-bucket/dir/
$ gsutil du -sh s3://yyy-bucket/dir/
$ aws s3 ls --human --recursive --sum s3://yyy-bucket/dir/

参考
ディレクトリの合計容量を確認するには(local, GCS, S3) - Qiita

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
What you can do with signing up
3