Como cd em um diretório com espaço no nome?

Estou a tentar entrar no directório./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)

quando o digito manualmente, o backspace faz a sua coisa de carácter de escape, mas não quando uso a expansão do parâmetro com a variável DOCS.

eu tentei outras variações como nenhuma barra invertida.

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

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

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

ou

$ 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
O mesmo acontece com $HOME:

$ echo $HOME
/home/my dir

cd $HOME também não funciona. As citações devem ser postas à volta.

mas que raio:

$ 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
Author: user2316667, 2013-08-19

14 answers

$ cd "$DOCS"

Tem de citar "$DOCS" para evitar que os espaços sejam processados como separadores de palavras. Na maioria das vezes, as referências variáveis devem ser citadas.

Note que $HOME teria o mesmo problema. A questão vem de quando a shell avalia referências variáveis; não tem nada a ver com que variáveis você usa ou como você atribui a elas. É a expansão que precisa de ser citada.

$ echo $HOME
/home/my dir
Isto é enganador. echo está a ecoar as duas cordas /home/my e dir. Se utilizar cd ou ls irá ver como funciona realmente.
$ 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!>

Posso perguntar porque funciona quando o digito manualmente, mas não numa variável?
Grande pergunta! Vamos examinar os comandos que escreveu:
$ 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
A razão pela qual isto não funciona é porque o Bash não analisa citações dentro de Expansões variáveis. It does perform word splitting, so whitespace in unquoted variable expansions is taken as word separators. Ele não analisa aspas de forma alguma, o que significa que não pode colocar aspas duplas dentro de uma variável para substituir a divisão de palavras.
$ cd $DOCS
Por causa disto, passaram-se dois parâmetros. Tanto quanto cd sabe, parece que escreveste:
$ cd '"/cygdrive/c/Users/my' 'dir/Documents"'
Dois parâmetros, com aspas intactas.
 58
Author: John Kugelman, 2013-08-19 22:11:05

Solução:

cd "Documents and Photos"
Problema resolvido.

A razão pela qual estou a enviar esta resposta é que você vai descobrir que o StackOverflow está a ser usado por utilizadores de todos os dias (não apenas web devs, programadores ou utilizadores de energia) e este foi o resultado número um para uma simples pergunta do utilizador do Windows no Google.

As pessoas estão a ficar mais experientes em tecnologia, mas não estão necessariamente familiarizadas com a linha de comando nos casos acima.
 19
Author: Mindsect Team, 2017-07-16 14:01:26
$ DOCS="/cygdrive/c/Users/my\ dir/Documents"
Eis o teu primeiro problema. Isto coloca um carácter de barra invertida real em $DOCS, como poderá ver ao executar este comando:
$ echo "$DOCS"
/cygdrive/c/Users/my\ `

Ao definir DOCS, você precisa de escapar do carácter do espaço. Você pode citar o texto (usando aspas simples ou duplas) ou você pode escapar apenas do carácter de espaço com uma barra invertida. Não podes fazer as duas coisas. (Na maioria dos sistemas Unix-like, você pode ter uma barra invertida em um arquivo ou nome de diretório, embora não seja uma boa idéia. No Cygwin ou Windows, \ é um separador de pastas. Mas vou assumir que o nome verdadeiro do Diretório é my dir, não my\ dir.)

$ cd $DOCS

Isto passa dois argumentos para cd. O primeiro é cygdrive/c/Users/my\, e o segundo é dir/Documents. Acontece que cd silenciosamente ignora tudo menos o seu primeiro argumento, o que explica a mensagem de erro:

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

Para definir $DOCS o nome do seu directório Documents, faça qualquer um destes:

$ DOCS="/cygdrive/c/Users/my dir/Documents"
$ DOCS='/cygdrive/c/Users/my dir/Documents'
$ DOCS=/cygdrive/c/Users/my\ dir/Documents
Uma vez feito isso, para mudar para o seu ... directório, coloque a referência da variável entre aspas (é uma boa ideia para qualquer referência de variável na bash, a menos que tenha a certeza de que o valor não tem caracteres engraçados):
$ cd "$DOCS"

Você também pode considerar dar a esse diretório um nome sem quaisquer espaços nele -- embora isso possa ser difícil de fazer em geral no Windows.

 5
Author: Keith Thompson, 2013-08-19 23:17:27

Para mudar para uma pasta com espaços no nome, basta escrever assim:

cd My\ Documents

Carrega em entra e serás bom

 2
Author: Nsaavs, 2019-10-31 16:19:16

Porque não colocar o seguinte no seu .cshrc (ou .bashrc, ou seja qual for a sua concha por omissão):

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

A primeira vez que fazes isto, tens de fazer

source .cshrc

Para actualizar a linha de comandos com este novo nome, poderá então escrever

mydoc

Quando Quiser cd para o seu directório.

A preguiça é a mãe da invenção...
 1
Author: Floris, 2013-08-19 21:54:54

Se quiser sair de c:\ e quiser ir para c:\Documents and settings, escreva na consola: c:\Documents\[space]+tab e o cygwin irá completá-lo automaticamente como c:\Documents\ and\ settings/

 1
Author: antonio, 2015-09-30 15:40:45

Tenta

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

cd "$DOCS"
 0
Author: michael501, 2013-08-19 21:39:47
Ok, também passei algum tempo frustrante com este problema. O meu pequeno guia.

Abrir o ecrã, por exemplo. Se não mudou o seu disco em cmd, escreva:

Ecrã de Cd

Agora se quiser mostrar as subpastas:

Cd , make 1 spacebar , and press tab 2 vezes

Agora se quiser indicar directório / ficheiro com espaço em nome. Vamos abrir algum Nome do ficheiro F. g., para o abrir precisamos de tipo:

Ficheiro de Cd\ Nome

P. S. repare neste espaço após barra:)

 0
Author: Vasyl Gutnyk, 2016-06-25 14:36:43

Método 1 : com aspas

cd "C:/Prgram Files (x86)"

cd 'C:/Program Files (x86)'

Geral

cd 'Folder Path'

Método 2 : sem usar aspas

cd Program\ Files \(x86\)

Generalizado Sempre que queremos saltar o próximo personagem, usamos blackslash \.

Para a pergunta acima: cd /cygdrive/c/Users/my\ dir/Documents

 0
Author: shaurya uppal, 2020-06-20 09:12:55

A Cygwin tem problemas em reconhecer o espaço entre o nome do PC. Então, para resolver isso, você tem que usar "\" após a primeira palavra, em seguida, incluir o espaço, em seguida, o sobrenome.

Tal como".../my\ dir / "

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

Outra maneira interessante e simples de o fazer, é colocar o directório entre aspas ( "" )

E. g. execute-o da seguinte forma:

$ cd c:
$ cd Users
$ cd "my dir"
$ cd Documents
Espero que funcione?
 0
Author: Damilare Oyediran, 2019-05-08 11:33:58

Use o símbolo de barra invertida para escapar do espaço

C:\> cd my folder

Será

 C:\> cd my\folder 
 0
Author: Ilemona James Atuluku, 2019-06-11 07:44:40

Como uma alternativa ao uso de aspas, para uma pasta para a qual deseja ir frequentemente, poderá usar o cdable_vars Opção de consola:

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

Agora, para mudar para essa pasta de qualquer lugar, você pode usar

cd docs

E a linha de comandos indicará qual a pasta para a qual mudou:

$ cd docs
/cygdrive/c/Users/my dir/Documents
 0
Author: Benjamin W., 2019-10-17 17:17:19

Usa aspas! cd "Name of Directory"
Ou você pode ir para o file explorer e clicar em "copy path" no canto superior esquerdo!

 0
Author: samarmohan, 2020-10-14 15:01:07

Em vez de:

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

Tenta:

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

Isto deve funcionar em qualquer sistema POSIX.

 -2
Author: user2697927, 2018-06-08 06:13:08