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

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

$tree
.
|--目录
|`--带有spaces.txt的文件
`--b目录
|--另一个带有spaces.txt的文件
`--还有一个文件是spaces.pdf

变成:

$tree
.
|--a_dir
|`--file_with_spaces.txt
`--布迪尔
|--另一个带有_spaces.txt的_文件
`--还有另一个文件,带有_spaces.pdf

我使用:

*中f的

;执行mv“$f”“${f///}”;完成

虽然它不是递归的,但它非常快速和简单。我相信这里会有人把它更新为递归的

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

发表评论