web-dev-qa-db-fra.com

Comment cd dans un répertoire avec un espace dans le nom?

J'ai essayé beaucoup de choses. Voir ci-dessous:

Essayez d’entrer dans le répertoire:/cygdrive/c/Utilisateurs/mon répertoire/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)

Comportement très étrange. Lorsque je le tape manuellement, le retour arrière fait son caractère de caractère d'échappement. Mais pas lorsque j'utilise l'extension de paramètre avec la variable DOCS.
J'ai essayé d'autres variantes, telles que l'absence de barre oblique inversée.

$ 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

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

Je sais que c'est possible. Vois ici:

$ echo $HOME
/home/my dir

[EDIT] Comme indiqué, cd $ HOME ne fonctionne pas non plus. des citations doivent être mises autour.

Que diable:

$ 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"

Vous devez citer "$DOCS" pour éviter que les espaces soient analysés en tant que séparateurs de mots. Plus souvent qu'autrement, les références variables doivent être citées.

Notez que $HOME aurait le même problème. Le problème provient du moment où le shell évalue les références de variable; cela n'a rien à voir avec les variables que vous utilisez ou la façon dont vous les affectez. C'est l'expansion qui doit être citée.

$ echo $HOME
/home/my dir

C'est trompeur. echo fait écho aux deux chaînes /home/my et dir. Si vous utilisez cd ou ls, vous verrez comment cela fonctionne.

$ 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!>

Puis-je demander pourquoi cela fonctionne quand je le tape manuellement mais pas dans une variable?

Bonne question! Examinons les commandes que vous avez tapées:

$ 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

Cela ne fonctionne pas parce que Bash n'analyse pas les guillemets dans les extensions de variable. Il fait effectue le fractionnement de Word, ainsi les espaces dans les développements de variable non entre guillemets sont considérés comme des séparateurs de Word. Il ne fait pas analyser les guillemets de quelque manière que ce soit, ce qui signifie que vous ne pouvez pas mettre de guillemets doubles dans une variable pour remplacer le fractionnement de Word.

$ cd $DOCS

De ce fait, deux paramètres sont passés à cd. Autant que cd sache que cela ressemble à ce que vous avez écrit:

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

Deux paramètres, avec les guillemets intacts.

42
John Kugelman

SOLUTION:

cd "Documents and Photos"

problème résolu.

La raison pour laquelle je soumets cette réponse, c'est que vous constaterez que StackOverflow est utilisé par tous les utilisateurs quotidiens (pas seulement les développeurs Web, les programmeurs ou les utilisateurs expérimentés). Il s'agissait du premier résultat d'une simple question d'utilisateur Windows sur Google.

Les gens sont de plus en plus familiarisés avec les technologies, mais ne sont pas nécessairement familiarisés avec la ligne de commande dans les cas précédents.

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

Voici votre premier problème. Cela met un caractère de barre oblique inverse dans $DOCS, comme vous pouvez le constater en lançant cette commande:

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

Lorsque vous définissez DOCS, vous devez échapper au caractère espace. Vous pouvez citer la chaîne (en utilisant des guillemets simples ou doubles) o vous pouvez échapper uniquement au caractère espace avec une barre oblique inverse. Vous ne pouvez pas faire les deux. (Sur la plupart des systèmes de type Unix, vous pouvez insérer une barre oblique inversée dans un nom de fichier ou de répertoire, bien que ce ne soit pas une bonne idée. Sous Cygwin ou Windows, \ est un délimiteur de répertoire. Mais je vais supposer que le nom réel du répertoire est my dir, ne pas my\ dir.)

$ cd $DOCS

Ceci passe deux arguments à cd. Le premier est cygdrive/c/Users/my\, et le second est dir/Documents. Il arrive que cd ignore discrètement tout sauf son premier argument, ce qui explique le message d'erreur:

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

Mettre en place $DOCS au nom de votre répertoire Documents, utilisez l’une des méthodes suivantes:

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

Une fois que vous avez fait cela, pour passer à votre répertoire Documents, mettez la référence de la variable entre guillemets (c'est une bonne idée pour toute) référence de la variable dans bash, sauf si vous êtes sûr la valeur n'a pas de caractères amusants):

$ cd "$DOCS"

Vous pouvez également envisager de donner à ce répertoire un nom sans espaces - bien que cela puisse être difficile à faire en général sous Windows.

5
Keith Thompson

Si vous voulez passer de c:\ et vous voulez aller à c:\Documents and settings, écris sur la console: c:\Documents\[space]+tab et cygwin le complèteront automatiquement comme c:\Documents\ and\ settings/

1
antonio

Pourquoi ne pas mettre ce qui suit dans votre .cshrc (ou .bashrc, ou quel que soit votre shell par défaut):

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

La première fois que vous faites cela, vous devez le faire

source .cshrc

pour mettre à jour le shell avec ce nouvel alias, vous pouvez taper

mydoc

chaque fois que vous voulez cd dans votre répertoire.

La paresse est la mère de l'invention...

1
Floris

ok, j'ai passé du temps frustrant avec ce problème aussi. Mon petit guide.

Ouvrez le bureau par exemple. Si vous n'avez pas changé votre disque dans cmd, tapez:

cd desktop

Maintenant, si vous voulez afficher les sous-dossiers:

cd, créez 1 barre d'espacement, puis appuyez sur onglet 2 fois

Maintenant, si vous voulez entrer le répertoire/fichier avec ESPACE IN NAME . Permet d’ouvrir quelques nom de fichier f.g., pour l’ouvrir, nous devons taper:

fichier cd\nom

p.s. remarquez cet espace après le slash :)

0
Vasyl Gutnyk

METHOD1: avec citations

cd "C:/Prgram Files (x86)"

cd 'C:/Program Files (x86)'

Généralisé

cd 'Folder Path'

Method2: Sans utiliser de citations

cd Program\ Files \(x86\)

Généralisé Chaque fois que nous voulons ignorer le caractère suivant, nous utilisons blackslash \.

Pour la question ci-dessus: cd /cygdrive/c/Users/my\ dir/Documents

0
shaurya uppal

essayer

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

cd "$DOCS"
0
michael501

Cygwin a un problème pour reconnaître l’espace entre le nom du PC. Donc, pour résoudre ce problème, vous devez utiliser "\" après le premier mot, puis inclure l'espace, puis le nom de famille.

comme ".../mon\dir /"

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

Une autre méthode simple et intéressante consiste à mettre le répertoire entre guillemets ("").

par exemple, exécutez-le comme suit:

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

Esperons que ça marche?

0

Utilisez le symbole barre oblique inverse pour sortir de l'espace

C:\> cd my folder

sera

 C:\> cd my\folder 
0
Ilemona James Atuluku