我正在尝试使用以下命令将数千个文件上传到 Google Cloud Storage:
gsutil -m cp *.json gs://mybucket/mydir
但我收到此错误:
-bash: Argument list too long
处理此问题的最佳方法是什么?我显然可以编写一个 bash 脚本来迭代不同的数字:
gsutil -m cp 92*.json gs://mybucket/mydir
gsutil -m cp 93*.json gs://mybucket/mydir
gsutil -m cp ...*.json gs://mybucket/mydir
但问题是我事先不知道我的文件名将是什么,所以编写该命令并非易事。
有没有办法用
gsutil
native 处理这个问题(我不这么认为, from the documentation ),或者有办法在 bash 中处理这个问题,我可以一次列出 10,000 个文件,然后将它们通过管道传输到 gsutil
命令? 最佳答案
Eric 的答案应该有效,但另一种选择是通过引用通配符表达式来依赖 gsutil 的内置通配符:
gsutil -m cp "*.json" gs://mybucket/mydir
解释更多:“参数列表太长”错误来自 shell,它具有用于扩展通配符的有限大小缓冲区。通过引用通配符,您可以防止 shell 扩展通配符,而是 shell 将该文字字符串传递给 gsutil。 gsutil 然后以流式方式扩展通配符,即在执行操作时扩展它,因此它永远不需要缓冲无限量的扩展文本。因此,您可以在任意大的表达式上使用 gsutil 通配符。在对象名称上使用 gsutil 通配符时也是如此,例如,这将起作用:
gsutil -m cp "gs://my-bucket1/*" gs://my-bucket2
即使 gs://my-bucket1 的顶层有十亿个对象。
关于bash - gsutil:参数列表太长,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44780079/