Amazon s3 amazon s3重命名和覆盖文件、建议和风险
我有一个桶,里面有两种文件名:Amazon s3 amazon s3重命名和覆盖文件、建议和风险,amazon-s3,batch-rename,Amazon S3,Batch Rename,我有一个桶,里面有两种文件名: [Bucket]/[file] [Bucket]/[folder]/[file] 例如,我可以: MyBucket/bar MyBucket/foo/bar 我想将所有[Bucket]/[folder]/[file]文件重命名为[Bucket]/[file]文件(从而覆盖/丢弃[Bucket]/[file]文件)。 因此,与前面的示例一样,我希望MyBucket/foo/bar变成MyBucket/bar(并覆盖/duscard原始的MyBucket/bar) 我
[Bucket]/[file]
[Bucket]/[folder]/[file]
MyBucket/bar
MyBucket/foo/bar
[Bucket]/[folder]/[file]
文件重命名为[Bucket]/[file]
文件(从而覆盖/丢弃[Bucket]/[file]
文件)。因此,与前面的示例一样,我希望
MyBucket/foo/bar
变成MyBucket/bar
(并覆盖/duscard原始的MyBucket/bar
)
我尝试了两种方法:
s3cmd mv s3://MyBucket/foo/bar s3://MyBucket/bar
重命名(s3://MyBucket/foo/bar,s3://MyBucket/bar)
我的问题是:
谢谢。由于s3cmd和SDK这两种方法实际上都会发出相同的REST调用,因此您可以安全地选择最适合您的方法
当您移动文件时,如果目标文件存在,则始终会被替换,然后,如果您不希望出现这种行为,则需要检查目标文件名是否已存在,以便执行移动操作。因为我大约5个月前问过这个问题,所以我有一些时间获得一些见解;因此,我会亲自回答: 据我所见,在性能方面没有重大差异。我可以想象,从PHP内部调用
s3cmd
可能代价高昂,因为每个请求都要调用一个外部进程;但是再一次——亚马逊的SDK使用cURL发送请求,所以没有太大区别
我注意到的一个不同点是,Amazon的SDK倾向于抛出cURL异常(似乎是随机的,而且很少),但是s3cmd
根本没有崩溃。我的脚本运行在10个成千上万的文件上,因此我必须学习如何处理这些cURL异常。我的理论是,当服务器上存在通信冲突时(例如,当两个进程试图使用相同的资源时),cURL崩溃。我在一个开发服务器上工作,有时几个进程同时使用cURL访问S3;这些是cURL表现出这种行为的唯一情况 结论:
使用
s3cmd
可能会更稳定,但使用SDK可以实现更多功能,更好地与PHP代码集成;只要您记得处理SDK抛出cURL异常的罕见情况(我认为每1000个请求中就有一个请求,当多个进程同时运行时)。Hello!我还试图在单个bucket中移动和覆盖文件夹(及其驻留的文件),我注意到您有:rename(s3://MyBucket/foo/bar,s3://MyBucket/bar)。这在PHP中是如何工作的?或者这句话只是在EC2上一字不差地起作用吗?@AndyBarlow,我在:。如果您有更多问题,请与我联系。