Bash - 用下划线替换空格但用一个替换多个空格

nat*_*ath 3 filenames regular-expression rename

我使用rename下划线文件名中的空格,只需:

rename "s/ /_/g" * 
Run Code Online (Sandbox Code Playgroud)

但是我遇到从网上下载的文件经常有多个空格的问题。我使用了一个讨厌的解决方法(但仅适用于 3 个空格,这在大多数情况下就足够了),但必须有比以下更优雅的方法:

rename "s/   /_/g" *; rename "s/  /_/g" *; rename "s/ /_/g" *
Run Code Online (Sandbox Code Playgroud)

jes*_*e_b 7

以下对我有用:

rename 's/\s+/_/g' *
Run Code Online (Sandbox Code Playgroud)

它将匹配一个到无限的空白实例

请注意,这也适用于换行符和制表符,但是根据您的用例,我认为这会更可取而不是不需要?但是要专门匹配空间,您可以执行以下操作:

rename 's/ +/_/g' *
Run Code Online (Sandbox Code Playgroud)