既に存在しているファイルまでご丁寧にダウンロードしてくれてしまい嵌まったのでメモ。
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つだけがダウンロード対象になりましたよ!
これで、解決ですヾ(*・ω・)シ
同じ症状で悩んでいました。助かりました!
返信削除