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


8

我尝试了以下方法:

rename 'bla bla .txt' blabla.txt

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

Answers:


15

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

此外,要避免出现白变现象,请在其前面加上一个\

"Ubuntu One"Ubuntu\ One

您的命令将是

mv bla\ bla.txt blabla.txt
  • 反斜杠告诉bash,下一个字符在某种程度上很特殊,例如,\a对于“ bell”,\对于文字空间等等

    参见man ascii(7)了解更多

另外,由于您现在使用的是正确的命令mv,如果有很多空格,则可以使用文件名加引号:

mv "bla    bla.txt" blabla.txt

(这将是bla\ \ \ \ bla.txt转义的形式)

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

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

    mv期望:

    • ["mv", "source", "destination", ]
  • 注意:键入“ mv”和文件名的前几个字符,然后按TAB将为您提供文件名的转义版本,从而使重命名变得快速,容易。


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

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

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


谢谢,如果原始文件名中有很多空格,该命令将如何显示?是否有一个简单的正则表达式,因此无需转义每个空格?
NES 2010年

更新了答案以解决许多空格和单引号与双引号。
Stefano Palazzo

单引号和双引号之间是有区别的,但是与这个问题无关。看到这篇文章的确切细节
Stefano Palazzo

4

重命名是批量重命名的专用命令。直觉上,我们通常所说的“重新命名”实际上是对新名称的“移动”:

mv 'bla bla .txt' blabla.txt

在单引号和双引号中写入文件名有什么区别?
NES 2010年

4
双引号允许扩展变量并用于过程替换;单引号没有。A=bla ; mv "$A $A .txt" blabla.txt将移动bla bla .txt,但A=bla ; mv '$A $A .txt' blabla.txt将查找实际上名为“ $ A $ A .txt”的文件。不过,任何一种都可以为您的示例工作。
frabjous

1
rename "s/\s//g" "bla bla.txt"

s是sed替代命令。

\ s用于空白

您将一无所获。其他替换字符串在第二个正斜杠之后。

g用于全局,即替换每个实例。省略g仅替换第一个实例。


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

rename "s/\s/_/g" *
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.