web-dev-qa-db-ja.com

名前にスペースを含むディレクトリに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
45
user2316667
$ cd "$DOCS"

スペースがWord区切り文字として解析されないようにするには、"$DOCS"を引用符で囲む必要があります。多くの場合、変数参照は引用符で囲む必要があります。

$HOMEにも同じ問題があることに注意してください。この問題は、シェルが変数参照を評価するときに発生します。使用する変数や変数への割り当て方法とは関係ありません。引用する必要があるのは拡張です。

$ echo $HOME
/home/my dir

これは不正です。 echoは、実際には2つの文字列/home/mydirをエコーし​​ています。 cdまたはlsを使用すると、実際にどのように機能するかがわかります。

$ 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が変数展開内の引用符を解析しないためです。 It does Word分割を実行します。そのため、引用符で囲まれていない変数展開の空白はWordの区切り記号として使用されます。 It does n't引用符を何らかの方法で解析します。つまり、変数内に二重引用符を入れてWord分割をオーバーライドすることはできません。

$ cd $DOCS

このため、cdには2つのパラメーターが渡されます。 cdが知っている限り、あなたが書いたように見えます:

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

二重引用符がそのままの2つのパラメーター。

42
John Kugelman

解決:

cd "Documents and Photos"

問題が解決しました。

この回答を提出する理由は、StackOverflowが毎日のユーザー(Web開発者、プログラマー、またはパワーユーザーだけでなく)によって使用されており、これがGoogleでの単純なWindowsユーザーの質問に対する一番の結果であることがわかります。

人々は技術に精通しつつありますが、上記の場合のコマンドラインに必ずしも精通しているわけではありません。

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

これが最初の問題です。次のコマンドを実行するとわかるように、これにより実際のバックスラッシュ文字が$DOCSに挿入されます。

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

DOCSを定義するときは、スペース文字をエスケープする必要があります。文字列を引用符で囲むことができます(一重引用符または二重引用符のいずれかを使用)またはバックスラッシュでスペース文字のみをエスケープできます。両方を行うことはできません。 (ほとんどのUnixライクシステムでは、ファイル名またはディレクトリ名にバックスラッシュを使用できますが、それは良い考えではありません。CygwinまたはWindowsでは、\はディレクトリ区切り文字です。しかし、ディレクトリの実際の名前はmy dirではなくmy\ dirです。

$ cd $DOCS

これは、2つの引数をcdに渡します。最初はcygdrive/c/Users/my\で、2番目はdir/Documentsです。 cdは最初の引数以外をすべて静かに無視することがあります。これはエラーメッセージの説明です。

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

$DOCSDocumentsディレクトリの名前に設定するには、次のいずれかを実行します。

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

それが完了したら、Documentsディレクトリに変更するために、変数参照を二重引用符で囲みます(bashでany変数参照を使用することをお勧めします。値に面白い文字は含まれていません):

$ cd "$DOCS"

また、そのディレクトリにスペースを入れずに名前を付けることを検討することもできますが、Windowsで一般的に行うのは難しい場合があります。

5
Keith Thompson

c:\から移動し、c:\Documents and settingsに移動したい場合は、コンソールに次のように記述します。c:\Documents\[space]+tabとcygwinはc:\Documents\ and\ settings/として自動補完します

1
antonio

.cshrc(または.bashrc、またはデフォルトのシェルは何でも)に以下を入れてみてください:

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

初めてこれを行うには、あなたがする必要があります

source .cshrc

この新しいエイリアスでシェルを更新するには、次のように入力します

mydoc

ディレクトリにcdしたいときはいつでも。

怠azineは発明の母です...

1
Floris

わかりました、私もこの問題でいくつかのイライラする時間を過ごしました。私の小さなガイド。

たとえば、デスクトップを開きます。 cmdでディスクを切り替えなかった場合は、次を入力します。

cd desktop

サブフォルダーを表示する場合:

cd、1にするスペースバー、そしてtabを2回押す

ここでSPACE IN NAMEでディレクトリ/ファイルを入力する場合。いくつかのファイル名 f.g.を開いて、それを開くには次のように入力する必要があります:

cd file\name

追伸スラッシュの後のこのスペースに注意してください:)

0
Vasyl Gutnyk

METHOD1:引用符付き

cd "C:/Prgram Files (x86)"

cd 'C:/Program Files (x86)'

一般化

_cd 'Folder Path'_

Method2:引用符を使用しない

cd Program\ Files \(x86\)

一般化次の文字をスキップしたいときはいつでも、ブラックスラッシュ_\_を使用します。

上記の質問:_cd /cygdrive/c/Users/my\ dir/Documents_

0
shaurya uppal

試してみる

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

cd "$DOCS"
0
michael501

Cygwinには、PC名の間のスペースを認識する問題があります。そのため、これを解決するには、最初のWordの後に「\」を使用し、スペース、次に姓を含める必要があります。

「.../my\dir /」など

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

別の興味深い簡単な方法は、ディレクトリを引用符( "")で囲むことです。

たとえば、次のように実行します。

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

うまくいきますか?

0

バックスラッシュ記号を使用してスペースをエスケープします

C:\> cd my folder

なります

 C:\> cd my\folder