我目前正在编写一个脚本,用s3cmd同步s3桶中的文件。
我检查文件,它说:
s3cmd sync LOCAL_DIR s3://BUCKET[/PREFIX] or s3://BUCKET[/PREFIX] LOCAL_DIR
我也find一个不错的select:
--delete-removed Delete remote objects with no corresponding local file [sync]
我用s3cmd sync的第一种forms进行了testing–delete-removed:
s3cmd sync -r --delete-removed LOCAL_DIR s3://BUCKET[/PREFIX]
它像一个魅力s3桶将删除任何文件不在我的LOCAL_DIR
但是,当我尝试第二种forms:
s3cmd sync -r --delete-removed s3://BUCKET[/PREFIX] LOCAL_DIR
s3cmd似乎首先删除LOCAL_DIR下的所有文件,然后从s3存储区下载文件到我的LOCAL_DIR
这显然是浪费时间,所以有另一种更好的方式来同步,而不是先删除我所有的本地文件。 也就是说,将s3存储桶中的所有文件完全复制到本地目录
注意path名称中的尾部斜线(或缺less斜线)。 它有所作为。
重要的是 – 在这两种情况下,只考虑path名的最后部分。 在dir1没有结尾的斜杠的情况下(在我们的例子中,这与〜/ demo / dir1是一样的),path的最后部分是dir1,这就是远程端使用的东西,附加在s3://之后s3 … / path /使s3:// s3 … / path / dir1 / …。
另一方面,在dir1 /(注意结尾的斜线)的情况下,将与〜/ demo / dir1 /(再次结尾的斜线)相同,实际上类似于说dir1 / * – 即展开到列表在dir1中的文件。 在这种情况下,path名的最后部分是没有dir1 /目录名的文件名(file1-1.txt和file1-2.txt)。 所以最后的S3path分别是s3://s3…/path/file1-1.txt和s3://s3…/path/file1-2.txt,都不包含dir1 /成员。 我希望这很清楚,如果不在邮件列表中询问或给我一个更好的措辞;-)