【问题标题】:How to replace all white spaces in file names in GCP Cloud Storage?如何替换 GCP 云存储中文件名中的所有空格?
【发布时间】:2021-03-11 03:58:00
【问题描述】:

我在 GCP 云存储上有一个存储桶,我想将文件名中包含空格的所有文件重命名为用连字符 (-) 删除空格的名称。

我尝试了类似的东西

gsutil ls gs://<bucket>/<folder_with_the_files_to_rename>/ | sed 's/ /-/g/gsutil mv & \1/'

不幸的是,我无法让 sed 命令替换空格,然后使用 gsutil mv 命令实际重命名文件。

有人可以帮我吗?

【问题讨论】:

  • 是否要将文件重命名为 Cloud Storage?
  • 如果您能显示一些gsutil ls gs://&lt;bucket&gt;/&lt;folder_with_the_files_to_rename&gt;/ 的示例输出,将会有所帮助。它是否在返回的文件名中保留gs://&lt;bucket&gt;/&lt;folder_with_the_files_to_rename&gt;/
  • @WiktorStribiżew - 是的,gsutil 返回整个对象名称(包括父路径)。

标签: bash google-cloud-platform sed google-cloud-storage gsutil


【解决方案1】:

如果您需要在使用gsutil ls gs://&lt;bucket&gt;/&lt;folder_with_the_files_to_rename&gt;/ 获得的某些文件名中将任何空格替换为-,您可以使用

gsutil ls gs://<bucket>/<folder_with_the_files_to_rename>/ | \
  while read f; do
    gsutil -m mv "$f" "${f// /-}";
  done;

gsutil mv command 移动/重命名文件,${f// /-} 是一种变量扩展语法,其中每个空格都替换为-// 代表所有出现)。因此,这里不需要sed

【讨论】:

  • 一次小的更改请求。 gsutil 正在列出 Cloud Storage 中的文件。您的 move 语句正在本地存储上移动文件。
  • 我想是的。我打算这个周末试试你的例子。你的重命名表情很酷。我经常使用sedregex,这在我的专家名单上。
  • 我遇到的问题:如果我像那样执行命令$(gsutil ls gs://&lt;bucket&gt;/&lt;folder_with_the_files_to_rename&gt;/)(直接在终端中或在 sh 文件中),它会返回,因为@John Hanley 用父路径描述了整个对象名称.例如gs:////file1.txt gs:////file 2.txt 即使有空格,它也是一个对象。查看下一条评论
  • 但是:如果我在你的答案中提到的 for 循环中使用此命令,则对象将在空白处拆分。那么输出为:gs://&lt;bucket&gt;/&lt;folder_with_the_files_to_rename&gt;/file1.txt gs://&lt;bucket&gt;/&lt;folder_with_the_files_to_rename&gt;/file 2.txt --> 三个对象
  • 试试while read -r f; do gsutil -m mv "$f" "${f// /-}"; done &lt; &lt;(gsutil ls gs://&lt;bucket&gt;/&lt;folder_with_the_files_to_rename&gt;/)
猜你喜欢
  • 2021-09-11
  • 2014-01-14
  • 1970-01-01
  • 2020-07-06
  • 2020-10-24
  • 2010-12-20
  • 1970-01-01
  • 2011-08-27
  • 1970-01-01
相关资源
最近更新 更多