Ric*_*ard 4 bash google-cloud-storage gsutil
我正在尝试使用以下命令将数千个文件上传到Google云端存储:
gsutil -m cp *.json gs://mybucket/mydir
Run Code Online (Sandbox Code Playgroud)
但我得到这个错误:
-bash: Argument list too long
Run Code Online (Sandbox Code Playgroud)
处理这个问题的最佳方法是什么?我显然可以编写一个bash脚本来迭代不同的数字:
gsutil -m cp 92*.json gs://mybucket/mydir
gsutil -m cp 93*.json gs://mybucket/mydir
gsutil -m cp ...*.json gs://mybucket/mydir
Run Code Online (Sandbox Code Playgroud)
但问题是我事先并不知道我的文件名是什么,因此编写该命令并非易事.
有没有办法用gsutil
本地处理这个(我不这么认为,从文档中),或者在bash中处理这个问题的方法,我可以一次列出10,000个文件,然后将它们传递给gsutil
命令?
Mik*_*rtz 18
Eric的答案应该有效,但另一种选择是依靠gsutil的内置通配符,引用通配符表达式:
gsutil -m cp "*.json" gs://mybucket/mydir
Run Code Online (Sandbox Code Playgroud)
要解释更多:"参数列表太长"错误来自shell,它具有扩展通配符的有限大小缓冲区.通过引用通配符可以防止shell扩展通配符,而shell会将该文本字符串传递给gsutil.gsutil然后以流式方式扩展通配符,即在执行操作时扩展它,因此它永远不需要缓冲无限量的扩展文本.因此,您可以使用gsutil通配符而不是任意大的表达式.在对象名称上使用gsutil通配符时也是如此,例如,这将起作用:
gsutil -m cp "gs://my-bucket1/*" gs://my-bucket2
Run Code Online (Sandbox Code Playgroud)
即使gs:// my-bucket1的顶层有十亿个对象.
归档时间: |
|
查看次数: |
1506 次 |
最近记录: |