aws / aws/aws-cli

No easy way to copy a single directory to s3

Open
#2,069 12 comments 15 reactions 0 assignees View on GitHub
breaking-change feature-request needs-major-version p3 s3
Dominant language
Python
Stars
17.3k
Forks
4.6k
Avg merge
1d 2h
Merged PRs (30d)
13

Description

My apologies if this has been discussed before; I tried my best to search for it (difficult) and read through the relevant labels.

Given a directory with multiple things in it:

```
/tmp
├── aaa
├── foo
├── bar
├── bbb
├── ccc
```

I'd like to copy one of those directories to s3, the equivalent of `cp -r /tmp/aaa /my-bucket/`.

Unfortunately, both `aws s3 cp` and `aws s3 sync` act more like `cp -r /tmp/aaa/* /my-bucket/` - that is, they skip the containing directory and splat all its containing files directly into the root of the bucket. Running either

```
[$]> aws s3 sync /tmp/aaa s3://my-bucket
```

or

```
[$]> aws s3 cp /tmp/aaa s3://my-bucket --recursive
```

will result in the _contents_ of `aaa` residing in s3:

```
my-bucket:
├── foo
├── bar
```

(For my particular purposes, I don't care about synchronization, but was just hoping that perhaps `sync` would act as I hoped. Existing documentation aside, I would expect `aws s3 cp` to act like `cp` and `aws s3 sync` to act like `rsync`, in regards to directories, at least as far as can happen with s3's lack of actual directories.)

This is annoying, because it forces me to `basename` the directory and tack that on to the end of the bucket. It's also surprising; not only does it not act like common *nix utilities, but `aws s3 sync help` implies a different behavior via its use of `.` as a source directory for all examples.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.