linux - 如何使用 bash 脚本替换文件名中的空格

标签 linux bash whitespace filenames

谁能推荐一个安全的解决方案,从给定的根目录开始,递归地将文件和目录名中的空格替换为下划线?例如:

$ tree
.
|-- a dir
|   `-- file with spaces.txt
`-- b dir
    |-- another file with spaces.txt
    `-- yet another file with spaces.pdf

变成:

$ tree
.
|-- a_dir
|   `-- file_with_spaces.txt
`-- b_dir
    |-- another_file_with_spaces.txt
    `-- yet_another_file_with_spaces.pdf

最佳答案

我使用:

for f in *\ *; do mv "$f" "${f// /_}"; done

虽然它不是递归的,但它非常快速和简单。我确定这里有人可以将其更新为递归。

${f///_} 部分利用 bash 的参数扩展机制将参数中的模式替换为提供的字符串。 相关语法是${parameter/pattern/string}。请参阅:https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.htmlhttp://wiki.bash-hackers.org/syntax/pe .

关于linux - 如何使用 bash 脚本替换文件名中的空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25637693/

相关文章:

java - 需要根据黑名单解析日志文件

c - lseek读取/proc/pid/mem的偏移量

Bash kill 后台命令 block

linux - Bash 脚本不继续读取文件的下一行

tortoisesvn - Dymola、空格和版本控制

sql-server - 在 Centos 7.3 上安装 SQL Server

linux - 如何通过 STIME 终止 linux 进程(悬空 svnserve 进程)

bash - 使用 --exclude、grep -v 或 sed 从 du 命令输出中排除隐藏文件

git - 处理只改变空格的帅哥

Ruby 日期计算 : Weird Outputs