¿Cómo cd a un directorio con un nombre que contiene espacios en bash?

84

Lo intenté cd "~/Library/Application Support/" -bash: cd: ~/Library/Application Support/: No such file or directory

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

colinfang
fuente

Respuestas:

113

Puede usar la Tabtecla después de presionar los primeros caracteres (esto "rellenará" el resto de la carpeta para usted, por ejemplo, escriba cd ~/LTabrellena, cd ~/Library/luego escriba ApTaby completará el resto por usted.

Si hay un espacio entre las palabras y no desea utilizar los métodos anteriores, coloque una \(barra invertida) antes del espacio, por ejemplo cd ~/Library/Application\ Support.

robzolkos
fuente
¿Es la ruta sensible a mayúsculas o minúsculas? Puedo acceder a la Biblioteca por cd ~ / library, pero el método de tabulación no funcionará si tengo un caso incorrecto.
colinfang
@colinfang OS X no distingue entre mayúsculas y minúsculas, pero conserva las mayúsculas y minúsculas. El shell bash debe ser un poco más exigente cuando se trata de autocompletar.
NReilingh
@NReilingh - Ajá, gracias.
colinfang
1
@colinfang: puede usar shopt -s nocasegloby bind 'set completion-ignore-case on'hacer que bash sea menos sensible a mayúsculas y minúsculas.
Chris Johnsen
2
colinfang: para completar una pestaña que no distingue entre mayúsculas y minúsculas con compatibilidad bash, pruebe 'zsh'. También la finalización de comodines de este shell es muy buena.
Ɱark Ƭ
27

El tema central aquí es cómo el shell ( bash ) hace citas y cómo eso afecta la expansión de tilde y la división en "palabras" (argumentos para el programa que se ejecuta).

bash solo trata la tilde principal especialmente si no se cita. Además, no se debe citar la siguiente barra inclinada.

Al mismo tiempo, bash analiza las líneas de comando en "palabras" basadas en espacios en blanco sin comillas. El cdcomando generalmente requiere exactamente un argumento (el directorio de destino). Una línea de comando como cd foo barsignifica correr cdcon dos argumentos: fooy bar. Si solo desea enviar un solo foo barargumento, entonces necesita citar el espacio:
(por ejemplo) cd foo\ bar(vea más ejemplos de citas a continuación).

En su situación particular, debe dejar la tilde y la siguiente barra sin comillas mientras cita el espacio en el nombre del directorio. Su cd "~/Library/Application Support/"versión de prueba termina citando demasiado (la tilde y su barra inclinada), mientras que su cd ~/Library/Application Support/versión de prueba cita muy poco (omite citar el espacio en el nombre del directorio).

La solución más común es usar el escape de un solo carácter para citar solo el espacio:

    cd ~/Library/Application\ Support

También puede usar comillas simples o dobles alrededor del espacio o el espacio y algunos otros bits de ese argumento (¡pero no el ~/!):

    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

Este tipo de citas tienen diferentes significados, pero son idénticos en estos ejemplos. Las comillas simples protegen las cadenas literales, mientras que las comillas dobles permiten diversas expansiones y sustituciones en la región citada.

A menudo, puede dejar que el shell haga el trabajo por usted.

  • Globbing (comodines):

    cd ~/L*/Ap*

    Puede usar shopt -s nocaseglobpara hacer que las mayúsculas y minúsculas no sean sensibles:

    cd ~/l*/ap*
  • Terminación:

    Presionar Tabdespués de ingresar cd ~/Lprobablemente lo expandirá a cd ~/Library/.
    Presionando Tabnuevamente después de ingresar Ap(ahora tiene cd ~/Library/Ap) probablemente lo expandirá a cd ~/Library/Application\ Support/(el shell insertó automáticamente la barra invertida de escape).

    Puede usar bind 'set completion-ignore-case on'para hacer que la terminación no distinga entre mayúsculas y minúsculas:

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

Chris Johnsen
fuente
Buena respuesta @ Chris. ¿Cómo conseguiste que los caracteres de tabulación parecieran teclas?
robzolkos
44
@RobZ: es la <kbd></kbd>etiqueta HTML (una de varias etiquetas HTML admitidas en la rebaja SE ).
Chris Johnsen
9

Cuando cita una ruta dos veces, está deteniendo la expansión de tilde. Entonces, hay algunas maneras de hacer esto:

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

La tilde no se cita aquí, por lo que la expansión de tilde seguirá ejecutándose.

cd "$HOME/My Code"

Puede expandir variables de entorno dentro de cadenas entre comillas dobles; esto es básicamente lo que está haciendo la expansión tilde

cd ~/My\ Code

También puede escapar de caracteres especiales (como el espacio) con una barra diagonal inversa.

useralone
fuente
9

Alternativamente, también puede arrastrar una carpeta a la ventana Terminal, la ruta completa del archivo / carpeta se pegará automáticamente al arrastrar.

Psychic2k
fuente
4

Necesitas escapar del espacio en " Application Support"

Tratar $ cd ~/Library/Application\ Support/

NReilingh
fuente
0

Si las formas normales no funcionan, intente sustituir espacios con %20.

Esto funcionó para mí cuando se trata de SSH y otros comandos de estilo de dominio como auto_smb.

atwixtor
fuente
0

Puede probar esto para carpetas / archivos espaciados si el archivo o el nombre de la carpeta contiene 1) extensión de nombre de archivo, el comando debe ser cd ~ / file \ name.extension / (o) cd ~ / "file name.extension" /

prasanth sivanesan
fuente
1
¿Cómo difiere o mejora esta respuesta con respecto a alguna de las otras respuestas similares?
fsb
Es la sintaxis de terminal perfecta para definir el espacio y dar comillas es una de las definidas por el usuario y también usar la tecla de tabulación no toma el nombre como 1) filename.ext 2) file name.ext Mientras presiona tab para este tipo de nombre, el auto la finalización de las palabras se muestran hasta "archivo" en ese momento podemos usar esta barra invertida para definir el espacio en la terminal. @fsp
prasanth sivanesan
Toda esa información debe estar en la Respuesta para mostrar a los lectores en qué se diferencia de las otras 9 Respuestas, incluida la Respuesta aceptada.
fsb