![更改名称中包含空格的文件的名称](https://linux22.com/image/52004/%E6%9B%B4%E6%94%B9%E5%90%8D%E7%A7%B0%E4%B8%AD%E5%8C%85%E5%90%AB%E7%A9%BA%E6%A0%BC%E7%9A%84%E6%96%87%E4%BB%B6%E7%9A%84%E5%90%8D%E7%A7%B0.png)
我不知道为什么,但是当我用命令更改此文件名时,mv
会出现错误,指出not a directory
.
-bash-4.1# mv {{ THEME SANITIZED }}.hacks.css myomega.hacks.css
答案1
mv "{{ THEME SANITIZED }}.hacks.css" myomega.hacks.css
将工作。
答案2
您需要告诉 shell 您的意思是将大括号和空格作为文件名的一部分,而不是被解释为 shell 语法。
您可以在单引号内键入包含特殊字符的文件名。这适用于除单引号本身之外的每个字符。这是脚本中最简单的方法。
mv '{{ THEME SANITIZED }}.hacks.css' myomega.hacks.css
如果需要在单引号字符串内使用单引号,则可以使用四字符序列'\''
。
mv 'It'\'s' wierd' this_is_weird
或者,您可以在任何字符前放置反斜杠,这样会使该字符失去其特殊含义。在没有特殊含义的字符前放置反斜杠并没有什么坏处,但这当然是额外的不必要的输入。
mv \{\{\ THEME\ SANITIZED\ \}\}.hacks.css myomega.hacks.css
如果文件名来自变量,请在变量扩展周围使用双引号以保留特殊字符(使用如 中的裸变量mv $source $destination
,变量值中的一些特殊字符将被扩展)。
source='{{ THEME SANITIZED }}.hacks.css'
destination=myomega.hacks.css
mv "$source" "$destination"
在命令行上,键入此类文件名的最简单方法是依赖完成。您需要至少输入第一个字符,然后按Tab。
mv \{
Tab
mv \{\{\ THEME\ SANITIZED\ \}\}.hacks.css
答案3
您可以使用双引号来转义或用斜杠转义,例如:
使用双引号:
mv "{{ THEME SANITIZED }}.hacks.css" myomega.hacks.css
使用斜杠:
mv \{\{\ THEME\ SANITIZED\ \}\}.hacks.css myomega.hacks.css
一些很酷的东西,有些人不知道如何删除或重命名以破折号开头的目录,您可以破折号破折号:D
示例:
mkdir -directory_with_dash
rm -r -- -directory_with_dash