我在GCP云存储上有一个存储分区,我想将文件名中带有空格的所有文件重命名为用连字符(-)删除空格的名称。
我尝试了类似的东西
gsutil ls gs://<bucket>/<folder_with_the_files_to_rename>/ | sed 's/ /-/g/gsutil mv & \1/'
不幸的是,我无法让sed命令工作来替换空白,然后使用gsutil mv命令实际重命名该文件。
有人能帮我吗?
如果你需要用-
某些文件名替换任何空格gsutil ls gs://<bucket>/<folder_with_the_files_to_rename>/
,则可以使用
gsutil ls gs://<bucket>/<folder_with_the_files_to_rename>/ | \
while read f; do
gsutil -m mv "$f" "${f// /-}";
done;
gsutil mv
命令移动/重命名文件,并且${f// /-}
是一种变量扩展语法,其中每个空格都被替换-
(//
代表所有出现)。因此,你不需要sed
这里。
一次零钱请求。
gsutil
正在列出Cloud Storage中的文件。您的移动语句正在移动本地存储上的文件。我认同。我计划本周末尝试您的例子。您的重命名表达非常酷。我用
sed
和regex
了很多,这正好我的专家的名单上。我
$(gsutil ls gs://<bucket>/<folder_with_the_files_to_rename>/)
遇到的问题是:如果我像这样执行命令(直接在终端中或在sh文件中),它将返回@John Hanley并用父路径描述整个对象名称。例如gs:// <bucket> / <folder_with_the_files_to_rename> /file1.txt gs:// <bucket> / <folder_with_the_files_to_rename> / file 2.txt即使有空格,它也是一个对象。查看下一条评论尝试
while read -r f; do gsutil -m mv "$f" "${f// /-}"; done < <(gsutil ls gs://<bucket>/<folder_with_the_files_to_rename>/)
@nikos太好了,我更新了答案。