Upload a directory, optionally do recursive uploads, or upload a single file. It also accepts a thread count when uploading a directory for multiple files at once. It requires boto from Amazon: sudo easy_install boto Command Options: ("-a","--api",help="S3 API Key") ("-s","--secret",help="S3 Secret") ("-d","--source",help="Source directory") ("-f","--file",help="Source file to upload") ("-b","--bucket",help="S3 Bucket") ("-p","--bucketpath",help="S3 Bucket path. Use as a base path for directories. An absolute path for files.") ("-r","--recursive",action="store_true",help="Whether to recurse into local source directory") ("-i","--ignoredates",action="store_true",help="Ignore modified dates and upload all files") ("-t","--threads",default=1,type=int,help="The number of threads to use to upload files") Command Usage Examples: Recursively upload files from local/folder/ to S3 mybucket/s3/folder/ with 3 threads: ./py-s3uploader -a "MYAPI" -s "SECRET" -d "local/folder/" -b "mybucket" -p "s3/folder/" -i -r -t 3 Recursively upload newer files from local/folder/ to S3 mybucket/s3/folder/ with 3 threads: ./py-s3uploader -a "MYAPI" -s "SECRET" -d "local/folder/" -b "mybucket" -p "s3/folder/" -r -t 3 Upload a single file: ./py-s3uploader -a "MYAPI" -s "SECRET" -f "local/file.txt" -b "mybucket" -p "s3/folder/file.txt" Class Usage Example: import s3uploader uploader = S3Uploader(args.api,args.secret) if args.source: uploader.upload_dir(args.bucket,args.bucketpath,args.source,args.recursive,args.threads,args.ignoredates) elif args.file: uploader.upload_file(args.bucket,args.bucketpath,args.file,args.ignoredates)