uploadコマンド
(2018/4/27)
重要じゃないけれどとりあえず保存しておきたいファイルや、一時的にファイルを共有したいときなどのためにuploadというコマンドを使ってなんでもS3にアップロードしている。
$ upload filename
とすると、ファイルをS3にアップロードしてアップロード先のURLが帰ってくる。Gyazoの感覚に近いかもしれない。後で使う可能性がある場合はURLをGyazoやScrapboxに記録しておく。フォルダとか考えなくて良いのでラクである。S3は安くて便利なのでこういう用途には良いと思う。
s3cmd コマンドが必要
~/.s3cfgにS3のアカウント情報を書いておく
masui.orgというバケットが有ることを仮定している
数テラバイトのデータをS3に置きっぱなしなのだが月額課金は$10ぐらいである。動画でもなんでもアップロードしている。ハッシュ値がファイル名になるので他人からアクセスされにくいだろう。
いまどき絶対にローカルに置いておきたいファイルはどういうものだろう。開発中のソフトウェアや文書はGitHubに置くだろうし。GitHubにも置きたくないのはid_rsaとかぐらい?
code:upload.rb
#!/usr/bin/env ruby
require 'digest/md5'
require 'shellwords'
file = ARGV.shift
exit unless file
exit unless File.exist?(file)
ext = ''
if file =~ /^(.*)(\.\w+)$/ then
ext = $2
end
hash = Digest::MD5.new.update(File.read(file)).to_s
dstfile = "s3://masui.org/#{hash0}/#{hash1}/#{hash}#{ext}"
system "/usr/local/bin/s3cmd -c /home/masui/.s3cfg put --acl-public #{Shellwords.escape(file)} #{dstfile} > /dev/null 2> /dev/null"
system "echo http://masui.org.s3.amazonaws.com/#{hash[0]}/#{hash[1]}/#{hash}#{ext}"
改良版を作った話があった (2018/12/14)
/miyamonz/uploadコマンドでscrapboxに任意のファイルを投げる
追記 2025/6/5
s3cmdではなく純正のaws s3 cpを使うのが良さげ
アカウント情報は~/.aws/
content-typeを指定するとブラウザで文字化けしないみたい
% aws s3 cp s3://your-bucket/yourfile.txt s3://your-bucket/yourfile.txt --metadata-directive REPLACE --content-type "text/plain; charset=utf-8"
#ブログ 2018/4/27