如何安全地对带有破折号或连字符的文件或目录执行操作?

如何安全地对带有破折号或连字符的文件或目录执行操作?

我试图将一个名为 的文件重命名12F-XYZ.pdf13F-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)会更可靠。

相关内容