有没有办法通过保留文件路径将副本文件用于S3存储桶?
这是一个例子: 1.我使用s3cmd sync -dry-run
生成bucket1中不同的文件列表,然后在bucket2中生成列表如下所示:
s3://BUCKET/20150831/PROD/JC-migration-test-01/META-INF/vault/definition/.content.xml
s3://BUCKET/20150831/PROD/JC-migration-test-01/META-INF/vault/nodetypes.cnd
s3://BUCKET/20150831/PROD/JC-migration-test-01/META-INF/vault/properties.xml
s3://BUCKET/20150831/PROD/JC-migration-test-01/jcr_root/.content.xml
s3://BUCKET/20150831/PROD/JC-migration-test-01/jcr_root/content/.content.xml
s3://BUCKET/20150831/PROD/JC-migration-test-01/jcr_root/content/app-store/.content.xml
像这样的简单循环:
diff_file_list=$(s3cmd -c s3cfg sync --dry-run s3://BUCKET/20150831/PROD s3://BUCKET/20150831/DEV | awk '{print $2}')
for f in $diff_file_list; do
s3cmd -c s3cfg cp $f s3://BUCKET/20150831/DIFF/
done
不起作用;它产生了这个:
File s3://BUCKET/20150831/PROD/JC-migration-test-01/META-INF/vault/definition/.content.xml copied to s3://BUCKET/20150831/DIFF/.content.xml
File s3://BUCKET/20150831/PROD/JC-migration-test-01/META-INF/vault/nodetypes.cnd copied to s3://BUCKET/20150831/DIFF/nodetypes.cnd
File s3://BUCKET/20150831/PROD/JC-migration-test-01/META-INF/vault/properties.xml copied to s3://BUCKET/20150831/DIFF/properties.xml
File s3://BUCKET/20150831/PROD/JC-migration-test-01/jcr_root/.content.xml copied to s3://BUCKET/20150831/DIFF/.content.xml
File s3://BUCKET/20150831/PROD/JC-migration-test-01/jcr_root/content/.content.xml copied to s3://BUCKET/20150831/DIFF/.content.xml
File s3://BUCKET/20150831/PROD/JC-migration-test-01/jcr_root/content/origin-store/.content.xml copied to s3://BUCKET/20150831/DIFF/.content.xml
谢谢,
答案 0 :(得分:0)
简答:不是不是!这是因为S3存储桶中的路径实际上不是目录/文件夹,并且S3存储桶没有这样的结构概念,即使各种工具以这种方式呈现它(包括s3cmd实际上令人困惑......)。
因此,“path”实际上是一个前缀(尽管sc3cmd同步到本地知道如何在文件系统的目录结构中转换此前缀)。
对于bash脚本,解决方案是: 1.创建一个文件列出s3cmd sync -dry-run命令的所有路径(基本上是差异列表)=>文件1
复制该文件并使用sed根据需要修改路径: sed's /(^ s3。*)PROD / \ 1DIFF /')=> file2的
合并文件,以便file1中的line1由file2中的line1继续,依此类推: paste file1 file2> final.txt
在循环中逐行读取final.txt,并将每行用作复制或syun命令的2个参数的集合:
而IFS =''读-r line || [[-n“$ line”]];做 s3cmd -c s3cfg同步$ line 完成< “final.txt”
注意: 1. s3cmd中的$ line不能用引号括起来;如果是同步命令会抱怨它只收到一个参数......当然! 2.这里使用了[[-n“$ line”]],这样最后一行的读取不会失败没有换行符号
不幸的是,Boto无法帮助更多,所以如果你在python中需要类似的东西,那么你也可以这样做....