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

回答:


113

Tab最初の数文字を押してからキーを使用できます(これにより、フォルダの残りの部分が「入力」されます。たとえば、入力cd ~/LTabしてcd ~/Library/から入力するApTabと、残りが入力されます)。

単語間にスペースがあり、上記の方法を使用したくない場合は、スペースの\前に(バックスラッシュ)を置きますcd ~/Library/Application\ Support


パスの大文字と小文字は区別されますか?cd〜/ libraryでライブラリにアクセスできますが、大文字と小文字が間違っている場合、タブメソッドは機能しません。
コリンファン

@colinfang OS Xは大文字と小文字を区別しませんが、大文字と小文字を保持します。bashシェルは、オートコンプリートに関してはもう少し差別的でなければなりません。
-NReilingh

@NReilingh-ああ、THX。
-colinfang

1
@colinfang:shopt -s nocaseglobおよびbind 'set completion-ignore-case on'を使用して、bashの大文字小文字の区別を小さくすることができます。
クリスジョンセン

2
colinfang-大文字と小文字を区別しないbash互換のタブ補完については、「zsh」を試してください。また、このシェルのワイルドカード補完は非常に優れています。
ⱮarkƬ

27

ここでの中心的な問題は、シェル(bash)がクォートを行う方法と、それがチルダの展開と「単語」(実行中のプログラムの引数)への分割にどのように影響するかです。

bashは、引用符が付いていない場合にのみ、先頭のチルダを特別に扱います。また、次のスラッシュも引用符で囲まないでください。

同時に、bashは、引用符で囲まれていない空白に基づいてコマンドラインを「単語」に解析します。cd通常、このコマンドには1つの引数(宛先ディレクトリ)のみが必要です。以下のようなコマンドライン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

これらの種類の引用符の意味は異なりますが、これらの例では同じです。単一引用符はリテラル文字列を保護しますが、二重引用符は引用された領域でさまざまな展開と置換を許可します。

多くの場合、シェルに作業を任せることができます。

  • グロビング(ワイルドカード):

    cd ~/L*/Ap*

    shopt -s nocaseglobグロビングの大文字と小文字を区別しないようにするために使用できます。

    cd ~/l*/ap*
  • 完了:

    Tab入力後にcd ~/Lを押すと、おそらくに展開されcd ~/Library/ます。入力してから(今はがあります)をもう一度
    押すと、おそらくそれが展開されます(シェルがエスケープバックスラッシュを自動的に挿入します)。TabApcd ~/Library/Apcd ~/Library/Application\ Support/

    を使用bind 'set completion-ignore-case on'して、完了の大文字と小文字を区別しないようにすることができます。

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


いい答え@クリス。どのようにしてタブ文字をキーのように見せましたか?
-robzolkos

4
@RobZ:これは<kbd></kbd>HTMLタグです(SE markdownでサポートされているいくつかのHTMLタグの 1つ)。
クリスジョンセン

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

スペースを定義して引用符を付けるための完璧な端末構文はユーザー定義のものの1つであり、タブキーを使用しても1)filename.ext 2)file name.extのような名前は取られません単語の補完はその時点で「ファイル」まで表示されます。このバックスラッシュを使用して、端末のスペースを定義できます。@fsp
プラサンスシバネサン

その情報はすべて、回答に含まれている必要があり、受け入れられた回答を含む他の9つの回答との違いを読者に示します。
fsb
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.