2012-07-21 10 views
7

Ich möchte ein lokales Verzeichnis mit einem Bucket in Google Cloud Storage synchronisieren. Ich möchte die lokalen Dateien kopieren, die nicht remote vorhanden sind und Dateien überspringen, die bereits remote und lokal vorhanden sind. Ist dies mit GSUtil möglich? Ich kann scheinen, eine sync-Option für GSUtil oder ein "nicht überschreiben" zu finden. Ist es möglich, dies zu skripten?Google Cloud Storage - GSUtil - Dateien kopieren, bestehende überspringen, nicht überschreiben

Ich bin auf Linux (Ubuntu 12.04)?

Antwort

9

gsutil unterstützt jetzt das noclobber-Flag (-n) im cp-Befehl. Aktualisieren Sie Ihre gsutil auf die neueste Version (mit gsutil update) und verwenden Sie dann die Option -n beim Ausführen einer Kopie.

Dieses Flag überspringt Dateien, die bereits am Ziel vorhanden sind.

+6

UPDATE: gsutil jetzt (Mai 2014) unterstützt rsync Option. –

1

gsutil unterstützt keine sync-Operation, aber Sie könnten es mit gsutil ls scripten, um die Dateien zu finden, die remote existieren.

+0

irgendwelche ideen wie man das skript? – ECII

4

Sie benötigen (-n) mit dem Befehl hinzufügen, erwähnt offiziell auf Google Cloud Platform:

-n: No-clobber. Wenn angegeben, werden vorhandene Dateien oder Objekte am Ziel nicht überschrieben. Alle Elemente, die von dieser Option übersprungen werden, werden als übersprungen gemeldet. Diese Option führt eine zusätzliche GET-Anforderung aus, um vor dem Hochladen der Daten zu überprüfen, ob ein Element vorhanden ist. Dies wird das erneute Übertragen von Daten speichern, aber die zusätzlichen HTTP-Anforderungen können die Übertragung kleiner Objekte langsamer und teurer machen.

Beispiel (unter Verwendung von Multi-Threading):

gsutil -m cp -n -a public-read -R large_folder gs://bucket_name 
1

Mit rsync können Sie Dateien/Objekte fehlt/modifizierte Kopie:

gsutil -m rsync -r <local_folderpath> gs://<bucket_id>/<cloud_folderpath> 

Übrigens, wenn Sie die -d Option verwenden, werden Sie Löschen Sie auch Dateien/Objekte in Ihrem Bucket, die lokal nicht mehr vorhanden sind.

Eine andere Option könnte sein, Object Versioning zu verwenden, so dass Sie die Dateien/Objekte in Ihrem Bucket durch Ihre lokalen Daten ersetzen, aber Sie können jederzeit zur vorherigen Version zurückkehren.