是否可以使用gsutil(或其他工具)在Google云端存储上批量重命名对象?我想找到一种方法将一堆图像从* .JPG重命名为* .jpg。
答案 0 :(得分:4)
<击> https://cloud.google.com/storage/docs/gsutil/addlhelp/WildcardNames 击>
<击>gsutil支持URI通配符
修改强>
作为存储桶子目录支持的一部分,我们更改了*通配符以仅匹配目录边界,并引入了新的**通配符......
你有目录吗?如果是这样,也许您需要转到每个目录或使用**。
gsutil -m mv gs://my_bucket/**.JPG gs://my_bucket/**.jpg
或
gsutil -m mv gs://my_bucket/mydir/*.JPG gs://my_bucket/mydir/*.jpg
击> <击> 撞击>
的修改
到目前为止,gsutil不支持目的地的通配符(截至4/12 / '14)
虚空API。
所以此时您需要检索所有JPG文件的列表, 并重命名每个文件。
python示例:
import subprocess
files = subprocess.check_output("gsutil ls gs://my_bucket/*.JPG",shell=True)
files = files.split("\n")[:-1]
for f in files:
subprocess.call("gsutil mv %s %s"%(f,f[:-3]+"jpg"),shell=True)
请注意,这需要数小时。
答案 1 :(得分:2)
这是在bash中执行此操作的一种本机方式,下面逐行解释:
gsutil ls gs://bucket_name/*.JPG > src-rename-list.txt
gsutil ls gs://bucket_name/*.JPG | sed 's/\.JPG/\.jpg/g' > dest-rename-list.txt
paste -d ' ' src-rename-list.txt dest-rename-list.txt | sed -e 's/^/gsutil\ mv\ /' | while read line; do bash -c "$line"; done
rm src-rename-list.txt; rm dest-rename-list.txt
该解决方案会推送2个列表,一个用于源文件,一个用于目标文件(将在“ gsutil mv”命令中使用):
gsutil ls gs://bucket_name/*.JPG > src-rename-list.txt
gsutil ls gs://bucket_name/*.JPG | sed 's/\.JPG/\.jpg/g' > dest-rename-list.txt
使用以下代码将“ gsutil mv”行和两个文件逐行连接:
paste -d ' ' src-rename-list.txt dest-rename-list.txt | sed -e 's/^/gsutil\ mv\ /'
然后在while循环中运行每一行: 边读边;做bash -c“ $ line”;完成
最后,清理并删除创建的文件:
rm src-rename-list.txt; rm dest-rename-list.txt
以上已针对正常工作的Google存储桶进行了测试。
答案 2 :(得分:1)
gsutil不支持并行化和批量复制/重命名。
您有两个选择:
如果使用GNU Parallel,最好部署一个新实例来进行批量复制/重命名操作:
gs://origin_bucket/path/file gs://dest_bucket/new_path/new_filename
sudo apt install parallel
gcloud auth login
parallel -j 20 --colsep ' ' gsutil mv {1} {2} :::: file_with_source_destination_uris.txt
这将使gsutil cp操作并行运行20次。
答案 3 :(得分:0)
答案 4 :(得分:-1)
试试这个:
gsutil mv gs://BUCKET_NAME/OLD_OBJECT_NAME gs://BUCKET_NAME/NEW_OBJECT_NAME
来源:https://cloud.google.com/storage/docs/copying-renaming-moving-objects#rename