2012-08-02

s3cmd syncで既にあるファイルまで同期されてしまう

s3cmdの同期機能であるs3cmd syncなのですが
既に存在しているファイルまでご丁寧にダウンロードしてくれてしまい嵌まったのでメモ。
2. Conditional transfer — only files that don’t exist at the destination in the same version are transferred by the s3cmd sync command. By default a md5 checksum and file size is compared. This is similar to a unix rsync command, with some exceptions outlined below.
Filenames handling rules and some other options are common for both these methods.
と書かれているので設計的には既に存在している同じ内容のファイルについてはスキップしてくれるはずなのです。
ところが実際test.bucketというS3上のバケットから/mntというローカルディレクトリに同期させてみると何度やっても同じ結果でした。
s3cmd sync -v --no-progress s3://test.bucket/ /mnt
INFO: Compiling list of local files...
INFO: Retrieving list of remote files for s3://test.bucket/ ...
INFO: Found 5 remote files, 4 local files
INFO: Applying --exclude/--include
INFO: Verifying attributes...
INFO: Summary: 5 remote files to download, 4 local files to delete
リモート(S3)にダウンロードすべきファイルが5個ファイルが見つかって、ローカルには4つ削除すべきファイルが見つかりました…と。
5個のうち1はディレクトリのダミーファイル(S3にはディレクトリという概念がないのでダミーファイルでディレクトリを表現している)なので、実ファイル4つ全てが削除されて新たにダウンロードされることになってます。
・・・もしやと思い、ローカルディレクトリ指定の最後に/を追加してみました
s3cmd sync -v --no-progress s3://test.bucket/ /mnt/
INFO: Compiling list of local files...
INFO: Retrieving list of remote files for s3://test.bucket/ ...
INFO: Found 5 remote files, 4 local files
INFO: Applying --exclude/--include
INFO: Verifying attributes...
INFO: Summary: 1 remote files to download, 0 local files to delete
削除されるファイルは無く、ディレクトリのダミーファイル1つだけがダウンロード対象になりましたよ!
これで、解決ですヾ(*・ω・)シ

1 件のコメント:

  1. 同じ症状で悩んでいました。助かりました!

    返信削除