我试图将一个名为 的文件重命名12F-XYZ.pdf
为13F-XYX_ABX.pdf
。
原始名称和所需名称都有连字符。我知道我们可以使用空格\
来解决问题,但是对于连字符或任何其他可能被 shell 或命令特殊处理的字符,我们该怎么办?
答案1
正如 David Foerster 在评论中指出的那样,shell 不会对连字符 (-) 进行特殊处理。因此,就您的示例而言,您只需执行以下操作:
mv 12F-XYZ.pdf 13F-XYX_ABX.pdf
但是如果您有一个空格或文字转义字符(反斜杠)或任何其他需要转义的字符,您可以使用转义字符进行转义,即\
或将整个名称放在引号内,'
'
以便引号内的内容按字面意思处理。
以下是一个例子:
mv 12F-XYZ.pdf 50M -XYZ.pdf ##Wrong
mv 12F-XYZ.pdf 50M\ -XYZ.pdf ##Right
mv 12F-XYZ.pdf '50M -XYZ.pdf' ##Right
一个经验法则就是,有疑问时就逃避它。 这篇文章关于特殊字符对你来说将是一篇非常值得一读的文章。
正如 muru 在评论中指出的那样,如果出现前导连字符,您可能会遇到问题,因为许多命令将以连字符开头的参数视为选项。在这种情况下,您可以使用以下任一方法:
mv -- foo.bar -foo.bar
mv foo.bar ./-foo.bar
表示--
上一个命令的开关结束(在本例中为mv
)。并非所有命令都支持--
,因此使用第二个选项(./-foo.bar
)会更可靠。