将多个文件从文件夹复制到s3,不包括少量文件夹

时间:2018-01-06 01:54:26

标签: amazon-web-services amazon-s3

我想将文件夹中的多个文件从ec2复制到s3存储桶。

文件夹结构就是这个,

└───data
    ├───201707
            |
            |__ new
            |
            |__ new1

我只想复制201707文件夹的内容,所以我使用下面的命令:

aws s3 cp data/ s3://bucket-name/data/201707/ --recursive --exclude 'data/new/*' --exclude 'data/new1/*'

但是s3中的输出有一个new和new1文件夹,排除这些文件夹的正确命令是什么?

3 个答案:

答案 0 :(得分:0)

--exclude aws-cli子命令的--includes3参数采用模式,而不仅仅是路径前缀。

--exclude (string) Exclude all files or objects from the command that matches the specified pattern.

来源:https://docs.aws.amazon.com/cli/latest/reference/s3/cp.html

The following pattern symbols are supported.

*: Matches everything
?: Matches any single character
[sequence]: Matches any character in sequence
[!sequence]: Matches any character not in sequence

来源:https://docs.aws.amazon.com/cli/latest/reference/s3/index.html#use-of-exclude-and-include-filters

根据您的示例,正​​确的呼叫应该是:

aws s3 cp data/ s3://bucket-name/data/201707/ --recursive --exclude 'data/new/*' --exclude 'data/new1/*'

答案 1 :(得分:0)

排除路径与您的data/相关,因此您不想通过--exclude再次指定它:

aws s3 cp data/ s3://<BUCKET_NAME>/data/201707/ --recursive --exclude "201707/new/*" --exclude "201707/new1/*"

这会将data/201707/中的文件复制到s3://bucket/data/201707/201707/也许这就是您想要的,但如果不是,您可能想要从目的地移除201707文件夹:

aws s3 cp data/ s3://<BUCKET_NAME>/data/ --recursive --exclude "201707/new/*" --exclude "201707/new1/*"

会将data/201707/中的文件复制到s3://bucket/data/201707/

注意:在Windows上,我需要对排除模式使用双引号。单引号不起作用。

答案 2 :(得分:0)

我有类似的要求,这对我有用。
可行-

aws s3 cp data/ s3://bucket-name/data/201707/ --recursive --exclude 'data/new/*' --exclude 'data/new1/*'

但是我做的没什么不同。 首先,我找到所需的文件,并将它们放到tmp或其他文件夹中

export files_found=`find $file_path -type f -name "*.txt" -mtime -1 -printf "%f\n"`

如果要将路径设置为变量,那会很好

mkdir -p $your_path/today_files

然后

cp $files_found /tmp/today_files

现在s3 cp可以轻松工作

aws s3 cp /tmp/today_files s3://$bucket_name/folder_name --recursive --region us-east-1`

然后清理您的文件夹。这将确保我们仅复制了s3中所需的文件。 希望它能起作用。