如何替换文件名中的空格?
我尝试了以下方式:
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" *