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

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

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

Use \ -> para el nombre del directorio: test one-> debe escribircd test\ one

Respuestas (7)

Puede usar la Tabtecla después de presionar los primeros caracteres (esto luego "completará" el resto de la carpeta por usted, por ejemplo, escriba completa cd ~/LTaby 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.

¿La ruta distingue entre mayúsculas y minúsculas o no? Puedo acceder a la Biblioteca por cd ~/library, pero el método de tabulación no funcionará si me equivoco de mayúsculas y minúsculas.
@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 - Ajá, gracias.
@colinfang: puede usar shopt -s nocasegloby bind 'set completion-ignore-case on'para hacer que bash sea menos sensible al caso.
colinfang: para una finalización de tabulación que no distinga entre mayúsculas y minúsculas con compatibilidad con bash, intente 'zsh'. También la finalización con comodines de este caparazón es muy buena.

El problema central aquí es cómo el shell ( bash ) cita y cómo eso afecta la expansión de la tilde y la división en "palabras" (argumentos para el programa que se está ejecutando).

bash solo trata la tilde inicial de forma especial si no está entrecomillada. Además, la siguiente barra tampoco debe citarse.

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 barmedios para ejecutar cdcon dos argumentos: fooy bar. Si solo desea enviar un solo foo barargumento, debe citar el espacio:
(p. ej.) 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/"prueba termina citando demasiado (la tilde y su barra inclinada), mientras que su cd ~/Library/Application Support/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 algunas otras partes 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énticas en estos ejemplos. Las comillas simples protegen cadenas literales, mientras que las comillas dobles permiten varias 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 globbing no distinga entre mayúsculas y minúsculas:

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

    Presionar Tabdespués de ingresar cd ~/Lprobablemente lo expandirá a cd ~/Library/.
    Presionar 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 finalización no distinga entre mayúsculas y minúsculas:

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

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

Cuando comillas dobles una ruta, estás deteniendo la expansión de la tilde. Así que hay algunas maneras de hacer esto:

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

La tilde no se cita aquí, por lo que aún se ejecutará la expansión de la tilde.

cd "$HOME/My Code"

Puede expandir las 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 caracteres especiales (como el espacio) con una barra invertida.

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

Necesitas escapar del espacio en " Application Support"

Tratar$ cd ~/Library/Application\ Support/

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

¿Cómo difiere o mejora esta respuesta de cualquiera de las otras respuestas similares?
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) nombre de archivo.ext 2) nombre de archivo.ext Al presionar tab para este tipo de nombre, el auto la finalización de las palabras se muestra hasta "archivo" en ese momento, podemos usar esta barra invertida para definir el espacio en la terminal. @fsp
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.

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

Esto funcionó para mí al tratar con SSH y otros comandos de estilo de dominio como auto_smb.