如何cd进入名称中带空格的目录?

时间:2013-08-19 21:33:29

标签: bash cygwin cd

我尝试了很多东西。见下文:

尝试进入目录: / cygdrive / c / Users / my dir / Documents

$ DOCS="/cygdrive/c/Users/my\ dir/Documents"

$ echo $DOCS
/cygdrive/c/Users/my\ dir/Documents

$ cd $DOCS
-bash: cd: /cygdrive/c/Users/my\: No such file or directory

$ cd /cygdrive/c/Users/my\ dir/Documents
(success)

非常奇怪的行为。当我手动输入时,退格会执行其转义字符。但是当我使用变量DOCS的参数扩展时 我尝试了其他变体,例如没有反斜杠。

$ DOCS=/cygdrive/c/Users/Rahman\ dir/Documents

$ echo $DOCS
/cygdrive/c/Users/my dir/Documents

$ cd $DOCS
-bash: cd: /cygdrive/c/Users/my: No such file or directory

$ DOCS="/cygdrive/c/Users/my dir/Documents"

$ echo $DOCS
/cygdrive/c/Users/my dir/Documents

$ cd $DOCS
-bash: cd: /cygdrive/c/Users/my: No such file or directory

我知道这是可能的。见这里:

$ echo $HOME
/home/my dir

[编辑]正如所指出的,cd $ HOME也不起作用。引号必须放在它周围。

到底是什么:

$ DOCS="\"/cygdrive/c/Users/my dir/Documents\""

$ echo $DOCS
"/cygdrive/c/Users/my dir/Documents"

$ cd $DOCS
-bash: cd: "/cygdrive/c/Users/my: No such file or directory

14 个答案:

答案 0 :(得分:38)

$ cd "$DOCS"

您需要引用"$DOCS"以防止将空格解析为单词分隔符。通常,应引用变量引用。

请注意,$HOME会遇到同样的问题。问题来自于shell评估变量引用时;它与您使用的变量或分配方式无关。这是需要引用的扩展。

$ echo $HOME
/home/my dir

这具有欺骗性。 echo实际上回显了两个字符串/home/mydir。如果您使用cdls,您会看到它是如何运作的。

$ ls $HOME
ls: cannot access /home/my: No such file or directory
ls: cannot access dir: No such file or directory
$ cd $HOME
bash: cd: /home/my: No such file or directory
$ cd "$HOME"
<success!>

  

当我手动输入它而不是变量时,我可以问为什么它可以工作吗?

好问题!让我们检查一下你输入的命令:

$ DOCS="\"/cygdrive/c/Users/my dir/Documents\""
$ echo $DOCS
"/cygdrive/c/Users/my dir/Documents"
$ cd $DOCS
-bash: cd: "/cygdrive/c/Users/my: No such file or directory

这不起作用的原因是因为Bash不解析变量扩展中的引号。 执行分词,因此将未引用的变量扩展中的空格作为单词分隔符。 不会以任何方式解析引号,这意味着您不能在变量中加入双引号来覆盖单词拆分。

$ cd $DOCS

因此,cd传递了两个参数。至于cd知道它看起来像你写的:

$ cd '"/cygdrive/c/Users/my' 'dir/Documents"'

两个参数,双引号完整。

答案 1 :(得分:8)

解决方案:

cd "Documents and Photos"

问题解决了。

我提交此答案的原因是您会发现StackOverflow正在被每天的用户(不仅仅是网络开发人员,程序员或高级用户)使用,这是一个简单的Windows用户问题的头号结果谷歌。

人们越来越懂技术,但在上述情况下不一定熟悉命令行。

答案 2 :(得分:5)

$ DOCS="/cygdrive/c/Users/my\ dir/Documents"

这是你的第一个问题。这会将实际的反斜杠字符放入$DOCS,正如您可以通过运行此命令看到的那样:

$ echo "$DOCS"
/cygdrive/c/Users/my\ `

定义DOCS时,您需要转义空格字符。您可以引用字符串(使用单引号或双引号),您可以使用反斜杠转义空格字符。你不能做到这两点。 (在大多数类Unix系统上,你可以在文件或目录名中加一个反斜杠,虽然这不是一个好主意。在Cygwin或Windows上,\是一个目录分隔符。但我&#39 ;我将假设目录的实际名称为my dir,而不是my\ dir。)

$ cd $DOCS

这将两个参数传递给cd。第一个是cygdrive/c/Users/my\,第二个是dir/Documents。碰巧cd悄悄忽略除了第一个参数之外的所有参数,这解释了错误信息:

-bash: cd: /cygdrive/c/Users/my\: No such file or directory

要将$DOCS设置为Documents目录的名称,请执行以下任一操作:

$ DOCS="/cygdrive/c/Users/my dir/Documents"
$ DOCS='/cygdrive/c/Users/my dir/Documents'
$ DOCS=/cygdrive/c/Users/my\ dir/Documents

完成上述操作后,要更改为Documents目录,请将变量引用括在双引号中(对于任何变量引用,这是一个好主意) bash,除非您确定该值没有任何有趣的字符):

$ cd "$DOCS"

您也可以考虑为该目录提供一个名称,但不包含任何空格 - 尽管在Windows上通常很难做到这一点。

答案 3 :(得分:1)

为什么不将以下内容放入.cshrc(或.bashrc,或者您的默认shell中):

alias mydoc 'cd "/cygdrive/c/Users/my dir/Documents"'

首次执行此操作时,您必须执行

source .cshrc

使用这个新别名更新shell,然后键入

mydoc

随时您想cd到您的目录。

懒惰是发明的母亲......

答案 4 :(得分:1)

如果您想从c:\移动而想要转到c:\Documents and settings,请在控制台上写一下:c:\Documents\[space]+tab并且cygwin会将其自动填充为c:\Documents\ and\ settings/

答案 5 :(得分:1)

要更改到名称上带有空格的目录,只需键入以下内容:

cd My\ Documents

输入,您会很好

答案 6 :(得分:0)

尝试

DOCS="/cygdrive/c/Users/my\ dir/Documents";

cd "$DOCS"

答案 7 :(得分:0)

好吧,我也在这个问题上花了一些令人沮丧的时间。我的小导游。

打开桌面。如果您没有在cmd中切换光盘,请键入:

cd desktop

现在,如果要显示子文件夹:

cd ,制作1 空格键,然后按标签 2次

现在,如果您想使用 SPACE IN NAME 输入目录/文件。让我们打开一些文件名 f.g.,打开它我们需要输入:

cd file \ name

P.S。斜线后注意这个空格:)

答案 8 :(得分:0)

只需将文件夹放在单引号中

即可

例如

C:\> cd my folder

将是

 C:\> cd 'my folder' 

答案 9 :(得分:0)

METHOD1 :使用引号

  

cd "C:/Prgram Files (x86)"

     

cd 'C:/Program Files (x86)'

     

<强>广义

     

cd 'Folder Path'

方法2 :不使用引号

  

cd Program\ Files \(x86\)

     

<强>广义   每当我们想要跳过下一个字符时,我们都会使用blackslash \

对于上述问题: cd /cygdrive/c/Users/my\ dir/Documents

答案 10 :(得分:0)

Cygwin在识别PC名称之间存在空格时出现问题。因此,要解决此问题,您必须在第一个单词之后使用“ \”,然后包含空格,然后输入姓氏。

例如“ ... / my \ dir /”

$ cd /cygdrive/c/Users/my\ dir/Documents

另一种有趣且简单的方法是将目录置于引号(“”)

例如 如下运行:

$ cd c:
$ cd Users
$ cd "my dir"
$ cd Documents

希望它有用吗?

答案 11 :(得分:0)

对于使用引号的替代方法,对于要经常访问的目录,可以使用cdable_vars shell option

shopt -s cdable_vars
docs='/cygdrive/c/Users/my dir/Documents'

现在,要从任何地方切换到该目录,您可以使用

cd docs

,shell将指示它已更改为哪个目录:

$ cd docs
/cygdrive/c/Users/my dir/Documents

答案 12 :(得分:0)

使用引号! cd "Name of Directory"
或者,您可以转到文件资源管理器,然后单击左上角的“复制路径”!

答案 13 :(得分:-2)

而不是:

DOCS="/cygdrive/c/Users/my\ dir/Documents"

尝试:

DOCS="/cygdrive/c/Users/my dir/Documents" 

这适用于任何POSIX系统。