Можно ли скопировать все файлы из одной корзины S3 в другую с помощью s3cmd? - PullRequest
74 голосов
/ 04 марта 2011

Я очень доволен s3cmd, но есть одна проблема: как скопировать все файлы из одной корзины S3 в другую?Это вообще возможно?

РЕДАКТИРОВАТЬ: Я нашел способ копировать файлы между корзинами, используя Python с boto:

from boto.s3.connection import S3Connection

def copyBucket(srcBucketName, dstBucketName, maxKeys = 100):
  conn = S3Connection(awsAccessKey, awsSecretKey)

  srcBucket = conn.get_bucket(srcBucketName);
  dstBucket = conn.get_bucket(dstBucketName);

  resultMarker = ''
  while True:
    keys = srcBucket.get_all_keys(max_keys = maxKeys, marker = resultMarker)

    for k in keys:
      print 'Copying ' + k.key + ' from ' + srcBucketName + ' to ' + dstBucketName

      t0 = time.clock()
      dstBucket.copy_key(k.key, srcBucketName, k.key)
      print time.clock() - t0, ' seconds'

    if len(keys) < maxKeys:
      print 'Done'
      break

    resultMarker = keys[maxKeys - 1].key

Синхронизация почти так же проста, как и копирование.Для ключей доступны поля для ETag, размера и последнего изменения.

Может быть, это поможет и другим.

Ответы [ 11 ]

1 голос
/ 06 марта 2011

s3cmd не будет копироваться только с префиксами или подстановочными знаками, но вы можете написать сценарий поведения с помощью 's3cmd ls sourceBucket' и awk для извлечения имени объекта.Затем используйте 's3cmd cp sourceBucket / name destBucket', чтобы скопировать каждое имя объекта в списке.

Я использую эти пакетные файлы в окне DOS в Windows:

s3list.bat

s3cmd ls %1 | gawk "/s3/{ print \"\\"\"\"substr($0,index($0,\"s3://\"))\"\\"\"\"; }"

s3copy.bat

@for /F "delims=" %%s in ('s3list %1') do @s3cmd cp %%s %2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...