如何使用bash cd到名称包含空格的目录?


84

我试过了 cd "~/Library/Application Support/" -bash: cd: ~/Library/Application Support/: No such file or directory

cd ~/Library/Application Support/ -bash: cd: ~/Library/Application Support/: No such file or directory

Answers:


113

您可以Tab在按下前几个字符后使用键(这将为您“填充”文件夹的其余部分,例如,键入cd ~/LTabfills cd ~/Library/然后键入ApTab,它将为您填充其余部分。

如果单词之间有空格,并且您不想使用上面的方法,请\在空格之前放置一个(反斜杠),例如cd ~/Library/Application\ Support


路径区分大小写还是不区分大小写?我可以通过cd〜/ library访问Library,但是如果遇到大小写错误,则tab方法将无法工作。
colinfang

@colinfang OS X不区分大小写,但保留大小写。对于自动完成功能,bash shell必须更具区分性。
2011年

@NReilingh-啊哈,谢谢。
colinfang

1
@colinfang:您可以使用shopt -s nocaseglobbind 'set completion-ignore-case on'使bash对大小写不敏感。
克里斯·约翰森

2
colinfang-对于具有bash兼容性的不区分大小写的制表符完成,请尝试使用'zsh'。同样,此shell的通配符完成非常好。
ⱮarkƬ

27

这里的核心问题是shell(bash)是如何引用的,以及它如何影响波浪号的扩展以及拆分为“单词”(正在运行的程序的参数)。

bash仅在不引用引号的情况下才对其进行特殊处理。此外,以下斜杠也不能引用。

同时,bash基于未引用的空格将命令行解析为“单词”。该cd命令通常只需要一个参数(目标目录)。命令行之类的cd foo bar意思是要运行cd两个参数:foobar。如果只想发送一个foo bar参数,则需要用引号引起来:(
例如)cd foo\ bar(请参见下面的更多引用示例)。

在您的特定情况下,在引用目录名称中的空格时,您需要保留波浪号和下一个斜杠。你的cd "~/Library/Application Support/"试用期结束了引用太多(波浪号和它的斜线),而你的cd ~/Library/Application Support/审判报价太少(它省略引用目录名称的空间)。

最常见的解决方案是使用单字符转义仅引用空格:

    cd ~/Library/Application\ Support

您还可以仅在空格或空格以及该参数的其他一些位(而不是~/!)周围使用单引号或双引号:

    cd ~/Library/Application' 'Support
    cd ~/Library/Application" "Support
    cd ~/Library/App'lication 'Support
    cd ~/Library/Application" Supp"ort
    cd ~/'Library/Application 'Support
    cd ~/"Library/Application "Support

这些引号具有不同的含义,但是在这些示例中它们是相同的。单引号保护文字字符串,而双引号允许在引用区域中进行各种扩展和替换。

通常,您可以让Shell为您完成工作。

  • 通配符(通配符):

    cd ~/L*/Ap*

    您可以使用shopt -s nocaseglob使其不区分大小写:

    cd ~/l*/ap*
  • 完成时间:

    Tab输入后按cd ~/L可能会将其扩展为cd ~/Library/。输入(您现在有了)后再
    Tab一次,可能会将其扩展为(shell自动插入转义的反斜杠)。Apcd ~/Library/Apcd ~/Library/Application\ Support/

    您可以bind 'set completion-ignore-case on'用来使补全不区分大小写:

    cd ~/l Tabcd ~/Library/; ap Tabcd ~/Library/Application\ Support/


好答案@克里斯。您是如何使Tab字符看起来像键的?
robzolkos

4
@RobZ:这是<kbd></kbd>HTML标记(SE markdown支持的几个HTML标记之一)。
克里斯·约翰森

9

当双引号路径时,您正在停止波浪号扩展。因此,有几种方法可以做到这一点:

cd ~/"My Code"
cd ~/'My Code'

这里没有引用波浪号,因此波浪扩展仍将运行。

cd "$HOME/My Code"

您可以在双引号字符串内扩展环境变量。这基本上就是波浪号扩展所做的

cd ~/My\ Code

您还可以使用反斜杠转义特殊字符(例如空格)。


9

您也可以将文件夹也拖到“终端”窗口中,拖动时会自动粘贴完整的文件/文件夹路径。


4

您需要转义“ Application Support”中的空格

尝试 $ cd ~/Library/Application\ Support/


0

如果正常方法无效,请尝试用替换空格%20

这在处理SSH和其他域样式命令(例如)时对我有用auto_smb


0

如果文件或文件夹名称包含1)file name.extension,则命令可以使用cd〜/ file \ name.extension /(或)cd〜/“ file name.extension” /


1
这个答案与其他类似答案相比有何不同或有所改善?
fsb

它是用于定义空间和引号的理想终端语法,它是用户定义的一种,并且使用Tab键也不会采用1)filename.ext 2)file name.ext之类的名称。到此为止,单词的完整显示将显示为“文件”,我们可以使用此反斜杠在终端中定义空格。@fsp
prasanth sivanesan

所有这些信息都应在“答案”中,以向读者显示它与其他9个答案(包括已接受的答案)有何不同。
fsb
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.