在Google云上运行bash脚本以批量下载到Bucket的最佳方法

在Google云上运行bash脚本以批量下载到Bucket的最佳方法,bash,curl,google-cloud-platform,sdk,gsutil,Bash,Curl,Google Cloud Platform,Sdk,Gsutil,我对使用谷歌云和云服务器非常陌生,我被困在一个非常基本的问题上 我想从internet服务器批量下载大约60000个csv.gz文件(有权限)。我编译了一组curl脚本,这些脚本通过管道传输到gsutil中,然后将其上传到我的bucket中的.sh文件中,如下所示 curlhttp://internet.address/csvs/file1.csv.gz |gsutil cp-gs://my_bucket/file1.csv.gz 卷曲http://internet.address/csvs/f

我对使用谷歌云和云服务器非常陌生,我被困在一个非常基本的问题上

我想从internet服务器批量下载大约60000个csv.gz文件(有权限)。我编译了一组
curl
脚本,这些脚本通过管道传输到
gsutil
中,然后将其上传到我的bucket中的
.sh
文件中,如下所示

curlhttp://internet.address/csvs/file1.csv.gz |gsutil cp-gs://my_bucket/file1.csv.gz
卷曲http://internet.address/csvs/file2.csv.gz |gsutil cp-gs://my_bucket/file2.csv.gz
...
卷曲http://internet.address/csvs/file60000.csv.gz |gsutil cp-gs://my_bucket/file60000.csv.gz
但是,如果从我的机器上运行,这将需要约10天,因此我希望直接从云端运行它。我不知道最好的办法。这是一个太长的过程,无法直接使用云Shell,我不确定云上的其他应用程序是运行下载到云存储桶的
.sh
脚本的最佳方式,或者,如果这种类型的
.sh
脚本是使用谷歌云上的应用程序从互联网批量下载文件的最有效方法

我看到了一些使用SDK的建议,我已经在本地机器上安装了SDK,但我甚至不知道从哪里开始


非常感谢您的帮助

Gcloud和云存储不提供从互联网抓取对象并将其直接复制到无中介(计算机、服务器或云应用程序)的存储桶中的可能性

关于哪个云服务可以帮助您运行bash脚本,您可以使用GCE always free VM(每个计费帐户1个免费实例)

要改进将文件上载到bucket的过程,可以使用GNU同时运行多个
Curl
命令,并缩短完成此任务的时间

要在ubuntu/debian上安装parallel,请运行以下命令:

sudo apt-get install parallel
例如,您可以使用要并行化的命令创建一个名为
downloads
的文件(您必须在该文件中写入所有curl命令)

下载文件

curl http://internet.address/csvs/file1.csv.gz | gsutil cp - gs://my_bucket/file1.csv.gz
curl http://internet.address/csvs/file2.csv.gz | gsutil cp - gs://my_bucket/file2.csv.gz
curl http://internet.address/csvs/file3.csv.gz | gsutil cp - gs://my_bucket/file3.csv.gz
curl http://internet.address/csvs/file4.csv.gz | gsutil cp - gs://my_bucket/file4.csv.gz
curl http://internet.address/csvs/file5.csv.gz | gsutil cp - gs://my_bucket/file5.csv.gz
curl http://internet.address/csvs/file6.csv.gz | gsutil cp - gs://my_bucket/file6.csv.gz
之后,您只需运行以下命令

parallel --job 2 < downloads
parallel--job 2
此命令将最多运行2个并行curl命令,直到文件中的所有命令都已执行


您可以应用于例程的另一个改进是使用
gsutil mv
代替
gsutil cp
mv
命令将在成功上载后删除文件,这可以帮助您节省硬盘空间。

如果您有每个CSV文件的MD5哈希,您可以使用存储传输服务,它支持将文件列表(必须通过HTTP[S]URL公开访问)复制到所需的GCS存储桶。请参见中转服务。

谢谢!我没有MD5哈希或文件大小。谢谢@JAHernandez!这个答案非常有用,我真的很感谢你关于并行化的提示!或者简单地让GNU并行从模板构建命令行:
seq 60000 | Parallel'curlhttp://internet.address/csvs/file{}.csv.gz | gsutil cp-gs://my_bucket/file{}.csv.gz'