Amazon-S3

帶有 –delete-removed 的 s3cmd

  • June 24, 2013

我目前正在編寫一個腳本來使用 s3cmd 同步 s3 儲存桶中的文件。

我檢查了文件,上面寫著:

s3cmd sync LOCAL_DIR s3://BUCKET[/PREFIX] or s3://BUCKET[/PREFIX] LOCAL_DIR

我也找到了一個不錯的選擇:

--delete-removed
        Delete remote objects with no corresponding local file [sync]

我測試了第一種形式的 s3cmd 同步 –delete-removed:

s3cmd sync -r --delete-removed LOCAL_DIR s3://BUCKET[/PREFIX]

s3 儲存桶將刪除不在我的 LOCAL_DIR 中的任何文件,這就像一個魅力

但是,當我嘗試第二種形式時:

s3cmd sync -r --delete-removed s3://BUCKET[/PREFIX] LOCAL_DIR

s3cmd 似乎首先刪除了我在 LOCAL_DIR 下的所有文件,然後將文件從 s3 儲存桶下載到我的 LOCAL_DIR

這顯然是在浪費時間,所以有沒有另一種更好的同步方式,而無需先刪除我所有的本地文件。也就是說,將所有文件從 s3 儲存桶複製到我的本地目錄

注意路徑名稱中的尾部斜杠(或缺少斜杠)。它有所作為。

http://s3tools.org/s3cmd-sync

重要——在這兩種情況下,只考慮路徑名的最後一部分。在沒有斜杠的 dir1 的情況下(在我們的例子中,它與 ~/demo/dir1 相同)路徑的最後一部分是 dir1 ,這就是在遠端端使用的,附加在 s3:// 之後s3…/path/ 使 s3://s3…/path/dir1/…。

另一方面,在 dir1/(注意尾部斜杠)的情況下,這與 ~/demo/dir1/(又是尾部斜杠)相同,實際上類似於 dir1/* - 即展開到dir1 中的文件。在這種情況下,路徑名的最後一部分是不帶 dir1/ 目錄名的文件名(file1-1.txt 和 file1-2.txt)。所以最終的 S3 路徑分別是 s3://s3…/path/file1-1.txt 和 s3://s3…/path/file1-2.txt,兩者都沒有 dir1/ 成員。我希望它足夠清楚,如果不是在郵件列表中詢問或給我發送更好的措辭;-)

引用自:https://serverfault.com/questions/517474