title: Boto3 to download all files from a S3 Bucket
body: <p>I'm using boto3 to get files from s3 bucket. I need a similar functionality like <code>aws s3 sync</code></p>
  
  <p>My current code is</p>
  
  <pre><code>#!/usr/bin/python
  import boto3
  s3=boto3.client('s3')
  list=s3.list_objects(Bucket='my_bucket_name')['Contents']
  for key in list:
      s3.download_file('my_bucket_name', key['Key'], key['Key'])
  </code></pre>
  
  <p>This is working fine, as  long as the bucket has only files.
  If a folder is present inside the bucket, its throwing an error</p>
  
  <pre><code>Traceback (most recent call last):
    File "./test", line 6, in &lt;module&gt;
      s3.download_file('my_bucket_name', key['Key'], key['Key'])
    File "/usr/local/lib/python2.7/dist-packages/boto3/s3/inject.py", line 58, in download_file
      extra_args=ExtraArgs, callback=Callback)
    File "/usr/local/lib/python2.7/dist-packages/boto3/s3/transfer.py", line 651, in download_file
      extra_args, callback)
    File "/usr/local/lib/python2.7/dist-packages/boto3/s3/transfer.py", line 666, in _download_file
      self._get_object(bucket, key, filename, extra_args, callback)
    File "/usr/local/lib/python2.7/dist-packages/boto3/s3/transfer.py", line 690, in _get_object
      extra_args, callback)
    File "/usr/local/lib/python2.7/dist-packages/boto3/s3/transfer.py", line 707, in _do_get_object
      with self._osutil.open(filename, 'wb') as f:
    File "/usr/local/lib/python2.7/dist-packages/boto3/s3/transfer.py", line 323, in open
      return open(filename, mode)
  IOError: [Errno 2] No such file or directory: 'my_folder/.8Df54234'
  </code></pre>
  
  <p>Is this a proper way to download a complete s3 bucket using boto3. How to download folders.</p>