如何替换文件名中的空格?

我尝试了以下方式:

rename 'bla bla .txt' blabla.txt 

但这不起作用,这种情况的正确语法是什么?

您不应该使用rename命名只有一个文件,而是使用mv (1) 。

此外,要逃避whitepsace,请在其前面加上\

"Ubuntu One"Ubuntu\ One

你的命令就是

 mv bla\ bla.txt blabla.txt 
  • 反斜杠告诉bash下一个字符在某种程度上是特殊的,例如\a表示’bell’, \表示文字空间等等

    请参阅man ascii (7)了解更多信息

或者,由于您现在使用正确的命令mv ,如果有很多空格,您可以引用文件名:

 mv "bla bla.txt" blabla.txt 

(这将是转义forms的bla\ \ \ \ bla.txt

  • 在bash中,引用的字符串(单引号或双引号)被视为单个参数,而未引用的字符串将被分割为多个参数,如下所示:

    • ["mv", "bla", "bla.txt", "blabla.txt", ]

    mv期望:

    • ["mv", "source", "destination", ]
  • 注意:输入’mv’和文件名的前几个字符并按TAB将为您提供文件名的转义版本,使重命名变得轻松快捷。


rename用于批处理使用正则表达式重命名文件, 如其手册页中的示例所示:

 rename 's/\.bak$//' *.bak 

从匹配“* .bak”的所有文件中删除任何出现的.bak(在字符串[$]的末尾)。

rename是批量重命名的专用命令。 毫不直观地,我们通常称之为“重命名”实际上是对新名称的“移动”:

 mv 'bla bla .txt' blabla.txt 
 rename "s/\s//g" "bla bla.txt" 

s是sed替换命令。

\ s适用于whiteSpace

你什么都没有替换。 其他替换字符串在第二个正斜杠之后。

g代表Global,即替换每个实例。 省略g仅替换第一个实例。


此命令将在所有文件中用下划线替换空格:

 rename "s/\s/_/g" *