我正在尝试缩小Google Cloud Storage Bucket中的7z多部分容器。我可以在不复制本地数据并重新上传的情况下执行此操作吗?
我想确保我执行文件的提取而不会产生不必要的开销。我不确定是否有任何方法可以直接在Bucket中完成。
在理想情况下,我可以将存档直接解压缩到存储桶中。
答案 0 :(得分:0)
我相信您可能会混淆现在使用的术语“存储”(例如,由File System抽象访问的永久性磁盘)与Google Cloud Storage Bucket可以做什么。
您可以对Objects进行多项操作,这些操作是存储在存储桶中的数据,包括上载和下载。
因此,您在Bucket中有一个压缩文件,并且您想对其进行解压缩,并且也要在Bucket中也具有解压缩的内容。然后,您必须将压缩文件下载到可以对其进行解压缩的计算机上,然后再上传解压缩的内容。
我将在这里给您演示。
确保您有一个存档文件,并且当前目录中没有其他内容。
ARCHIVE=ar0000.7z
如果尚未创建一个存储桶,则创建一个存储桶:
gsutil mb gs://sevenzipblobber
将存档文件上传到存储桶:
gsutil cp -v $ARCHIVE gs://sevenzipblobber/archives/
从存储桶中下载存档文件(可以在任何其他时间从任何其他存储桶中下载):
gsutil cp -v gs://sevenzipblobber/archives/$ARCHIVE .
提取并删除存档:
7z x $ARCHIVE && rm -v $ARCHIVE
将当前目录的内容上载到存储桶中,该内容应该是解压缩的存档文件的内容(请注意,使用-m flag可以加快上载速度,输出将变得混乱)
gsutil -m cp -vr . gs://sevenzipblobber/dearchives/$ARCHIVE
列出存储桶的内容:
gsutil ls -r gs://sevenzipblobber/
您还可以使用客户端服务器模式,在该模式下,服务器将负责解压缩存档并将内容再次上传到Cloud Storage。
客户端可以由存储桶上的事件触发Google Cloud Functions,在这种情况下,服务器可以是等待上传的HTTP服务器。 否则,客户端可能是Cloud Pub/Sub Notifications for Cloud Storage,因此服务器必须订阅相应的主题。