【发布时间】:2020-02-26 20:07:35
【问题描述】:
有没有办法使用 gsutil 命令批量复制或移动文件? 例如,如果我想将 100 个文件从给定文件夹复制到另一个。
【问题讨论】:
标签: google-cloud-storage gsutil
有没有办法使用 gsutil 命令批量复制或移动文件? 例如,如果我想将 100 个文件从给定文件夹复制到另一个。
【问题讨论】:
标签: google-cloud-storage gsutil
试试这个:
gsutil ls gs://bucketA | head -n 100 | shuf | gsutil cp -m -I gs://bucketB
这将从存储桶A 中获取文件列表,获取前100 个项目,使用shuf 随机化它们,并将它们通过管道传输到gsutil 以复制到存储桶B。 -I 标志从stdin 读取文件列表。
【讨论】:
另一种方法是使用Client libraries。例如在 Python 中:
from google.cloud import storage
storage_client = storage.Client()
bucket_name = 'my_bucket'
bucket = storage_client.get_bucket(bucket_name)
blobs_to_move = [blob for blob in bucket.list_blobs(prefix="folder1/")]
with storage_client.batch():
for blob in blobs_to_move[:100]:
# copy to new destination
new_blob = bucket.copy_blob(blob, bucket, "folder2/" + blob.name[8:])
# delete in old destination
blob.delete()
这会将前 100 个文件从 GCS 存储桶 my_bucket 中的 folder1 移动到 folder2。
【讨论】:
-I 标志将它们通过管道传输到gsutil。
稍作修改,它会随机将 100 个文件而不是前 100 个文件从存储桶 A 移动到存储桶 B:
gsutil ls gs://bucketA | shuf | head -n 100 | gsutil -m mv -I gs://bucketB
【讨论】: