3

在使用 gsutil 上传大量图像后,我遇到了一个奇怪的问题 - 通过 Google Cloud Console 无法查看上传的文件,如果我尝试执行“gsutil ls”,gsutil 本身就会抱怨。我 99% 确定这与在目录名称中使用“å”或“Å”以及空格有关。

所有上传都是从根文件夹递归完成的(多级子目录中的大型图像集合)。如果我尝试再次上传文件,gsutil 会跳过它们,因为它们已经存在,所以上传功能会做一些事情- 它与列表和下载的工作方式不同。

一个例子:

gsutil cp -R -n /Volumes/Photos/digitalfotografen.dk/2009/2009-05-30\ Søgården\ -\ bryllup/ gs://digitalfotografen/2009/
Skipping existing item: gs://digitalfotografen/2009/2009-05-30 Søgården - bryllup/Søgården 0128.CR2
...

好的 - 文件在那里,但通过 Google Cloud Console 浏览目录显示“无结果”。

还:

gsutil ls gs://digitalfotografen/2009/2009-06-27 Søgården - reklamefotos/20090627_IMG_0128.CR2
CommandException: "ls" command does not support "file://" URIs. Did you mean to use a gs:// URI?

我尝试转义空格并以不同的方式使用引号,但没有成功。

现在,有趣的是:

gsutil cp -R -n /Volumes/Photos/digitalfotografen.dk/2009/2009-05-30\ Søgården\ -\ bryllup/ gs://digitalfotografen/2009/
Copying file:///Volumes/Photos/digitalfotografen.dk/2009/2009-05-30 Søgården - bryllup/Søgården 0128.CR2 [Content-Type=application/octet-stream]...

这里我在源端专门复制了带有转义空格的文件夹,现在文件再次上传。这将创建另一个同名文件夹(至少在 Cloud Console 中如此显示),并且文件现在在两个文件夹中都可见。

我们在丹麦字符集中使用了标准美国 ASCII 之外的三个不同字符(“æøå”和大写“ÆØÅ”),但问题似乎影响“å”和“Å”——另外两个单独或组合工作正常。我的预感是“å”和“Å”可能会在 ASCII 中翻译成完全不同的东西,当允许 gsutil 根据根文件夹的名称自行处理目录命名时(进行多级递归),这会使事情偏离轨道) 但在用户指定根文件夹的转义名称时有效。

这可能是 python 问题而不是 gsutil 问题,但我没有资格确定这一点,因为我对一些大杂烩 shell 脚本之外的编程知识几乎为零。

4

2 回答 2

0

我知道这是一个老错误,但是我遇到了与上述类似的问题。

CommandException: "ls" command does not support "file://" URLs. Did you mean to use a gs:// URL?

使用gsutil来自 Scala 代码。

import sys.process._


object Main {
  def main(args: Array[String]): Unit = {
    val clients = s"gsutil ls gs://<bucket name>".!!
    val beforeDate: String = "date +%Y-%m-%d -d '-8 days'".!!
    val clientList = clients.split("\n").map(f => f.split('/').apply(1)).toList
    for (x <- clientList) {
      val countImg = (s"gsutil -m ls gs://<bucket name>/$x/${beforeDate.stripLineEnd}" #| "wc -l").!!
      println(countImg)
    }
  }
}

所以我发现,当我条纹LineEndbeforeDate时,错误消失了。因此,当gs://...路径中有“特殊”字符时会发生错误。所以一定要去掉任何“特殊”字符的变量。而这一切的发生只是因为我懒得用它java.time.LocalDate来生成beforeDate变量。希望这里能帮助遇到同样错误的其他人。

于 2021-07-06T08:25:32.133 回答
0

我们在 ubuntu wsl 版本的 windows 10 中遇到了 gsutil 的问题。命令 gsutil 在 shell 中完美运行,但在包含到 shell 脚本中时无法运行:

gsutil -m ls -lr gs://project.appspot.com/

错误:

commandexception: "ls" command does not support "file://" urls. did you mean to use a gs:// url?

通过直接调用脚本 /usr/lib/google-cloud-sdk/platform/gsutil/gsutil 而不是调用链接 /usr/bin/gsutil 来解决云:

/usr/lib/google-cloud-sdk/platform/gsutil/gsutil -m ls -lr gs://project.appspot.com/

我不知道为什么,但它正在工作。

感谢 Marion 为我们提供了一个如此罕见的错误 :-)

于 2020-01-27T12:22:32.157 回答