Amazon ora fornisce anche i propri strumenti CLI.
Da http://aws.amazon.com/cli/
Utilizzando una sintassi familiare, puoi visualizzare i contenuti dei tuoi bucket S3 in un elenco basato su directory.
$ aws s3 ls s3://mybucket LastWriteTime Length Name ------------- ------ ---- PRE myfolder/ 2013-09-03 10:00:00 1234 myfile.txt ...
È possibile eseguire caricamenti e download ricorsivi di più file in un singolo comando a livello di cartella. L'AWS CLI eseguirà questi trasferimenti in parallelo per migliorare le prestazioni.
$ aws s3 cp myfolder s3://mybucket/myfolder --recursive upload: myfolder/file1.txt to s3://mybucket/myfolder/file1.txt upload: myfolder/subfolder/file1.txt to s3://mybucket/myfolder/subfolder/file1.txt ...
Un comando di sincronizzazione semplifica la sincronizzazione dei contenuti di una cartella locale con una copia in un bucket S3.
$ aws s3 sync myfolder s3://mybucket/myfolder --exclude *.tmp upload: myfolder/newfile.txt to s3://mybucket/myfolder/newfile.txt ...
La documentazione per i comandi relativi ai file è disponibile qui.
S3cmd fa quello che vuoi. Caricamento e download di file, sincronizzazione di directory e creazione di bucket.
S3cmd è uno strumento a riga di comando gratuito e un client per il caricamento, il recupero e la gestione dei dati in Amazon S3 e altri fornitori di servizi di archiviazione cloud che utilizzano il protocollo S3, come Google Cloud Storage o DreamHost DreamObjects. È più adatto per utenti esperti che hanno familiarità con i programmi a riga di comando. È anche ideale per script batch e backup automatici su S3, attivati da cron, ecc.
Se non puoi (forse sei su un host condiviso) o non vuoi installare strumenti extra, è possibile usare solo bash, curl e openssl.
http://tmont.com/blargh/2014/1/uploading-to-s3-in-bash
file=/path/to/file/to/upload.tar.gz
bucket=your-bucket
resource="/${bucket}/${file}"
contentType="application/x-compressed-tar"
dateValue=`date -R`
stringToSign="PUT\n\n${contentType}\n${dateValue}\n${resource}"
s3Key=xxxxxxxxxxxxxxxxxxxx
s3Secret=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
signature=`echo -en ${stringToSign} | openssl sha1 -hmac ${s3Secret} -binary | base64`
curl -L -X PUT -T "${file}" \
-H "Host: ${bucket}.s3.amazonaws.com" \
-H "Date: ${dateValue}" \
-H "Content-Type: ${contentType}" \
-H "Authorization: AWS ${s3Key}:${signature}" \
https://${bucket}.s3.amazonaws.com/${file}
Nota che ho modificato questo script da quello nel link sopra. Ho aggiunto il -L
opzione perché AWS potrebbe inserire un reindirizzamento lì. Il -L
l'opzione seguirà il reindirizzamento per te.
Un altro avvertimento. Questo non funzionerà per file più grandi di 5 GB. Quelli richiedono un caricamento in più parti che richiederebbe uno script più complesso.