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

76

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

también cd ~/Library/Application Support/ -bash: cd: ~/Library/Application Support/: No such file or directory

    
pregunta colinfang 24.05.2011 - 04:33

7 respuestas

102

Puede usar la tecla Tabulación después de presionar los primeros caracteres (esto "rellenará" el resto de la carpeta, por ejemplo, escriba cd ~/L Tabulación rellena cd ~/Library/ y luego escribe Ap Tabulación y completará el resto por ti.

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

    
respondido por el robzolkos 24.05.2011 - 05:18
25

El problema principal aquí es cómo el shell ( bash ) hace citas 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 principal especialmente si no se cita. Además, la barra diagonal siguiente tampoco debe ser citada.

Al mismo tiempo, bash analiza las líneas de comando en "palabras" basadas en espacios en blanco sin comillas. El comando cd generalmente requiere exactamente un argumento (el directorio de destino). Una línea de comando como cd foo bar significa ejecutar cd con dos argumentos: foo y bar . Si solo desea enviar un único argumento foo bar , entonces debe citar el espacio:
(por ejemplo) cd foo\ bar (ver más ejemplos de citaciones 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 prueba de cd "~/Library/Application Support/" termina citando demasiado (la tilde y su barra), mientras que su prueba de cd ~/Library/Application Support/ cita muy poco (omite la cita del espacio en el nombre del directorio).

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

    cd ~/Library/Application\ Support

También puedes 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 varias expansiones y sustituciones en la región citada.

A menudo, puedes dejar que el shell haga el trabajo por ti.

  • Globbing (comodines):

    cd ~/L*/Ap*
    

    Puedes usar shopt -s nocaseglob para hacer que el globbing no distinga mayúsculas y minúsculas:

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

    Al presionar Tabulación después de ingresar cd ~/L probablemente se expandirá a cd ~/Library/ .
    Al presionar Tabulación nuevamente después de ingresar Ap (ahora tienes cd ~/Library/Ap ) probablemente lo expandirás a cd ~/Library/Application\ Support/ (el shell insertó automáticamente la barra invertida que se escapa).

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

    cd ~/l Tabulación cd ~/Library/ ; ap Tabulación cd ~/Library/Application\ Support/

respondido por el Chris Johnsen 24.05.2011 - 07:18
9

Cuando cita dos veces una ruta, está deteniendo la expansión de tilde. Así que 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 la tilde se seguirá ejecutando.

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 de tilde

cd ~/My\ Code

También puedes escapar de caracteres especiales (como el espacio) con una barra invertida.

    
respondido por el useralone 07.08.2012 - 19:53
8

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

    
respondido por el Psychic2k 24.05.2011 - 15:54
3

Debes escapar del espacio en " Application Support "

Prueba $ cd ~/Library/Application\ Support/

    
respondido por el NReilingh 24.05.2011 - 05:18
0

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

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

    
respondido por el atwixtor 02.04.2015 - 19:14
0

Puede probar esto para carpetas / archivos separados por Si el nombre del archivo o carpeta contiene 1) nombre de archivo. Extensión el comando debe ser cd ~ / file \ name.extension / (or) cd ~ / "file name.extension" /

    
respondido por el prasanth sivanesan 23.05.2017 - 14:58

Lea otras preguntas en las etiquetas