我想将文件夹中的多个文件从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文件夹,排除这些文件夹的正确命令是什么?
答案 0 :(得分:0)
--exclude
aws-cli子命令的--include
和s3
参数采用模式,而不仅仅是路径前缀。
--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中所需的文件。 希望它能起作用。