背景
と述べるほどでもないが、
AWS CLIのmvのドキュメントにははっきりと書かれていない。(実は(7)が最も近い)
結論
ない。ただし、--recursive オプションで、ファイル単位でmvすることができる。例
aws s3 mv s3://mybucket/folder1 s3://mybucket/folder2 --recursive
上記のコマンドを実行した場合、ファイル一つ一つをmvしてくれる。
mvも単なる名前の変更ではなく、内部でコピーするようで、ファイルのサイズに比例して時間がかかる。
ファイル(のサイズ)が膨大な場合、非常に時間がかかる。(例えば数時間から数日)
教訓
あとで変更しなくても良いようによく考えてファイル名をつけよう。
追記
2014/06/12
もうちょっと上記のコマンドが何をやっているのか見てみたい。
awscli/customizations/s3/s3handler.py
には
def _enqueue_multipart_tasks(self, filename):
num_uploads = 1
if filename.operation_name == 'upload':
num_uploads = self._enqueue_multipart_upload_tasks(filename)
elif filename.operation_name == 'move':
if filename.src_type == 'local' and filename.dest_type == 's3':
num_uploads = self._enqueue_multipart_upload_tasks(
filename, remove_local_file=True)
elif filename.src_type == 's3' and filename.dest_type == 'local':
num_uploads = self._enqueue_range_download_tasks(
filename, remove_remote_file=True)
elif filename.src_type == 's3' and filename.dest_type == 's3':
num_uploads = self._enqueue_multipart_copy_tasks(
filename, remove_remote_file=True)
else:
raise ValueError("Unknown transfer type of %s -> %s" %
(filename.src_type, filename.dest_type))
elif filename.operation_name == 'copy':
num_uploads = self._enqueue_multipart_copy_tasks(
filename, remove_remote_file=False)
elif filename.operation_name == 'download':
num_uploads = self._enqueue_range_download_tasks(filename)
return num_uploads
とあり、_enqueue_multipart_copy_tasksをみると、
def _enqueue_multipart_copy_tasks(self, filename,
remove_remote_file=False):
chunksize = find_chunksize(filename.size, self.chunksize)
num_uploads = int(math.ceil(filename.size / float(chunksize)))
upload_context = self._enqueue_upload_start_task(
chunksize, num_uploads, filename)
self._enqueue_upload_tasks(
num_uploads, chunksize, upload_context, filename, tasks.CopyPartTask)
self._enqueue_upload_end_task(filename, upload_context)
if remove_remote_file:
remove_task = tasks.RemoveRemoteObjectTask(
filename=filename, context=upload_context)
self.executor.submit(remove_task)
return num_uploads
upload_taskとなっているようである。さらに調べたが、
localシステムにdownloadしてs3にuploadしているわけではないようである。s3のput数やget数を消費するのか知りたかったが、わからなかった。