Amb*_*ose 0 bash whitespace replace
Naidim 回答了这个问题: 如何使用 bash 脚本替换文件名中的空格
这是我能为我工作的唯一答案,但我不明白我在看什么。
for f in *\ *; do mv "$f" "${f// /_}"; done
Run Code Online (Sandbox Code Playgroud)
分解它:
*\ *是一个文件名 glob 模式。这将扩展到当前目录中包含空格的所有文件。通常,空格分隔命令的参数(发生在 glob 扩展之前),但\在它之前有一个转义符使其成为文字空间,因此是 glob 模式的一部分。
for f in *\ *; 是一个 for 循环,循环后面的所有内容in- 在这种情况下是来自 glob 扩展的文件列表。该变量f将依次设置为每个文件名,并且done将为每个文件名执行直到命令的代码。
"$f"是一个变量扩展。变量扩展出现在单词拆分之前(与 glob 扩展不同),因此引号对于将文件名中的空格保持在一起作为单个参数的一部分而不是拆分为多个参数是必要的。
${f// /_}是带有替换的变量扩展。初始//意味着模式被重复应用于变量内容,而不仅仅是一次。之间的空格/ /是要搜索的模式,最后一个_是替换,因此f(循环中的文件名)中的所有空格都将替换为下划线。