Skip to content

Instantly share code, notes, and snippets.

@peterkovacs
Forked from chrismdp/s3.sh
Last active August 29, 2015 14:20
Show Gist options
  • Save peterkovacs/42e2be023c826e0830ab to your computer and use it in GitHub Desktop.
Save peterkovacs/42e2be023c826e0830ab to your computer and use it in GitHub Desktop.
# You don't need Fog in Ruby or some other library to upload to S3 -- shell works perfectly fine
# This is how I upload my new Sol Trader builds (http://soltrader.net)
# Based on a modified script from here: http://tmont.com/blargh/2014/1/uploading-to-s3-in-bash
S3KEY="my aws key"
S3SECRET="my aws secret" # pass these in
function putS3()
{
file_path=$1
aws_path=$2
file=$(perl -MURI::Escape -e 'print uri_escape($ARGV[0])' "$(basename $file_path)")
bucket='my-bucket-name'
date=$(date +"%a, %d %b %Y %T %z")
acl="x-amz-acl:public-read"
content_type=$(file --mime-type -b $file_path)
string="PUT\n\n$content_type\n$date\n$acl\n/$bucket$aws_path$file"
signature=$(echo -en "${string}" | openssl sha1 -hmac "${S3SECRET}" -binary | base64)
curl -v -X PUT -T "$file_path" \
-H "Host: $bucket.s3.amazonaws.com" \
-H "Date: $date" \
-H "Content-Type: $content_type" \
-H "$acl" \
-H "Authorization: AWS ${S3KEY}:$signature" \
"https://$bucket.s3.amazonaws.com$aws_path$file"
}
for file in "$path"/*; do
putS3 $file "/path/on/s3/to/files/"
done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment