{"id":17721823,"url":"https://github.com/sinbad/s3putsecurefolder","last_synced_at":"2025-09-12T18:51:12.706Z","repository":{"id":26139139,"uuid":"29584149","full_name":"sinbad/s3putsecurefolder","owner":"sinbad","description":"Syncs the contents of a folder to Amazon S3, optionally encrypting the files with GPG beforehand.","archived":false,"fork":false,"pushed_at":"2015-01-21T10:19:13.000Z","size":108,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2023-03-11T15:38:37.747Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sinbad.png","metadata":{"files":{"readme":"README","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-01-21T10:18:24.000Z","updated_at":"2019-05-23T08:41:38.000Z","dependencies_parsed_at":"2022-08-27T01:42:27.717Z","dependency_job_id":null,"html_url":"https://github.com/sinbad/s3putsecurefolder","commit_stats":null,"previous_names":[],"tags_count":null,"template":null,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sinbad%2Fs3putsecurefolder","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sinbad%2Fs3putsecurefolder/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sinbad%2Fs3putsecurefolder/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sinbad%2Fs3putsecurefolder/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sinbad","download_url":"https://codeload.github.com/sinbad/s3putsecurefolder/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246473279,"owners_count":20783236,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-25T15:36:22.638Z","updated_at":"2025-03-31T13:19:07.652Z","avatar_url":"https://github.com/sinbad.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"s3putsecurefolder.py\n--------------------\n\nFull discussion \u0026 background: http://www.stevestreeting.com/2009/08/02/s3-encrypted-upload-script-v2-python/\n\nSyncs the contents of a folder to Amazon S3, optionally encrypting the files with GPG beforehand.\n\nEach file is individually encrypted either with a public key of a private/public pair, or\nusing a simple symmetric passphrase. Therefore you can still get to each file separately\non S3, but would need to decrypt it to view the original contents.\n\nDetermines which files to sync based on the MD5 hash of the unencrypted contents, which \nis stored as metadata on the S3 side. This is more reliable than using date/time stamps\ndue to the distributed nature and that these stamps are changed when encrypting files.\n\nThis script never deletes any files on S3, it only creates or updates, making it suitable for\nbackup purposes. Feel free to add a --delete option if you like ;)\n\nAuthentication with S3 is either via explicit parameters (--accesskey, --secretkey), or\nyou can define environment variables AWS_ACCESS_KEY and AWS_SECRET_KEY.\n\nRequirements\n------------\n\nPython 2.7+\nBoto (easy_install boto)\nGPG (if encrypting)\n\nTested on Mac and Linux, probably works on Windows too. Maybe.\n\n\nUsage\n-----\n\nUsage: s3putsecurefolder.py [options] source_folder target_bucket [gpg_recipient_or_phrase]\n\nOptions:\n  -h, --help            show this help message and exit\n  -n, --dry-run         Do not upload any files, just list actions\n  -a ACCESS_KEY, --accesskey=ACCESS_KEY\n                        AWS access key to use instead of relying on\n                        environment variable AWS_ACCESS_KEY\n  -s SECRET_KEY, --secretkey=SECRET_KEY\n                        AWS secret key to use instead of relying on\n                        environment variable AWS_SECRET_KEY\n  -c, --create          Create bucket if it does not already exist\n  -v, --verbose         Verbose output\n  -S, --symmetric       Instead of encrypting with a public key, encrypts\n                        files using a symmetric cypher and the passphrase\n                        given on the command-line.\n  -X, --exclude         Exclude a file or wildcard pattern (may be listed more than once)\n  -D, --disableencryption\n                        Do not encrypt files before upload.\n                        \nLicense\n-------\nCopyright (c) 2009-2012 Steve Streeting\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsinbad%2Fs3putsecurefolder","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsinbad%2Fs3putsecurefolder","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsinbad%2Fs3putsecurefolder/lists"}