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 cp
やaws 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 cp
やaws 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/