ローカルディレクトリをGoogleCloudStorageのバケットに同期したい。リモートとローカルの両方にすでに存在するファイルをスキップして、リモートに存在しないローカルファイルをコピーしたいと思います。これはGSUtilでこれを行うことは可能ですか?GSUtilの「同期」オプションまたは「上書きしない」オプションが見つからないようです。これをスクリプト化することは可能ですか?
Linux(Ubuntu 12.04)を使用していますか?
ローカルディレクトリをGoogleCloudStorageのバケットに同期したい。リモートとローカルの両方にすでに存在するファイルをスキップして、リモートに存在しないローカルファイルをコピーしたいと思います。これはGSUtilでこれを行うことは可能ですか?GSUtilの「同期」オプションまたは「上書きしない」オプションが見つからないようです。これをスクリプト化することは可能ですか?
Linux(Ubuntu 12.04)を使用していますか?
gsutilは、cpコマンドでnoclobberフラグ(-n)をサポートするようになりました。gsutilを最新バージョンに更新し(gsutil updateを使用)、コピーを実行するときに-nフラグを使用します。
このフラグは、宛先にすでに存在するファイルをスキップします。
コマンドに(-n)を追加する必要があります。これは、GoogleCloudPlatformで公式に言及されています。
-n:クローバーなし。指定すると、宛先にある既存のファイルまたはオブジェクトは上書きされません。このオプションでスキップされたアイテムは、スキップされたものとして報告されます。このオプションは、データのアップロードを試みる前に、アイテムが存在するかどうかを確認するために追加のGETリクエストを実行します。これにより、データの再送信を節約できますが、HTTPリクエストを追加すると、小さなオブジェクトの転送が遅くなり、コストが高くなる可能性があります。
例(マルチスレッドを使用):
gsutil -m cp -n -a public-read -R large_folder gs://bucket_name
rsyncを使用して、欠落している/変更されたファイル/オブジェクトをコピーできます。
gsutil -m rsync -r <local_folderpath> gs://<bucket_id>/<cloud_folderpath>
さらに、この-d
オプションを使用すると、ローカルに存在しなくなったバケット内のファイル/オブジェクトも削除されます。
別のオプションとして、オブジェクトのバージョン管理を使用することもできます。これにより、バケット内のファイル/オブジェクトをローカルデータに置き換えますが、いつでも以前のバージョンに戻すことができます。