Quiero ingresar la siguiente carpeta en la terminal:
Milano, Torino (Jan)-Compressed
¿Cómo debo escribir el comando cd
para ingresar a este directorio?
Los espacios y otros caracteres especiales como \
, *
, )
, (
y ?
causan problemas cuando trato de usarlos en la línea de comandos o secuencias de comandos, por ejemplo:
$ cd space dir
bash: cd: space: No such file or directory
$ cat space file
cat: space: No such file or directory
cat: file: No such file or directory
$ cat (
bash: syntax error near unexpected token `newline'
$ echo content >\
> ^C
$ ls ?
( ) * ? \
¿Cómo ingreso los nombres de archivo o directorio que contienen caracteres especiales en el terminal en general?
command-line
filename
cd-command
Pomario
fuente
fuente
Respuestas:
Ese comando es ambiguo porque los espacios se usan normalmente para separar argumentos. cd no sabe lo que quieres hacer pero tienes dos posibilidades para resolverlo:
O bien " enmascaras " los espacios (y todos los demás caracteres especiales) para que el terminal sepa que te refieres al espacio como un carácter y no como un separador:
O pones el nombre o la ruta de tu carpeta entre comillas :
fuente
Un pequeño consejo: completar pestañas ;-)
cd Mi
(o más letras si es necesario) y presione Tab. Terminal te ayudará completando las palabras de descanso.Otra forma: arrastrar y soltar
cd
primero y luego arrastre y suelte el directorio en la terminal y presione enter.fuente
Escríbelo como:
De lo contrario, se trata
Milano,
como el nombre de la carpeta. Esto sucede debido a los espacios en el nombre de la carpeta. Alternativamente, escapa de algunos de los caracteres especiales:fuente
tl; dr : para citar un carácter especial, puede escaparlo con una barra diagonal inversa
\
o encerrarlo entre" "
comillas dobles o simples' '
. Tab ↹La finalización se encarga de las citas adecuadas.Lo que estás pidiendo se llama Citar :
Citando con el personaje de escape
\
Entonces, para ingresar un directorio o un archivo con un carácter especial, escape de este último con
\
, por ejemplo:bash
La finalización programable (también conocida como Tab ↹finalización) escapa automáticamente de caracteres especiales con el carácter de escape\
.Citando con comillas dobles
" "
Entonces, para ingresar un directorio o un archivo con un carácter especial, escape al menos el último o una mayor parte de su nombre de archivo o ruta con comillas dobles, por ejemplo:
Como
$
,`
y!
mantenga su significado especial dentro de las comillas dobles, la expansión de parámetros , la sustitución de comandos , la expansión aritmética y la expansión de historial se realizan en cadenas de comillas dobles.Citando con comillas simples
' '
Entonces, para ingresar un directorio o un archivo con un carácter especial, escape al menos el último o una mayor parte de su nombre de archivo o ruta con comillas dobles, por ejemplo:
Puede encontrar más información sobre las citas en
man bash
/ QUOTING , en wiki.bash-hackers.org y en tldp.org .fuente
C-como cadenas y $ 'cadena'
Entre otras cosas, uno puede usar el
$'...'
tipo de comillas para hacer uso de caracteres de barra diagonal inversa ANSI-C como\n
y\t
, incluidos los que ha mencionado. Del manual bash 4.3:Esto es particularmente útil con archivos que contienen líneas nuevas, pestañas, cuando está escribiendo líneas awk complejas en las que necesita utilizar diferentes formas de distinguir entre comillas simples y dobles, cuando los nombres de los archivos contienen comillas simples / dobles, etc.
Por ejemplo, crear y enumerar dichos archivos:
Puede utilizar valores hexadecimales de caracteres, como:
printf
La misma idea que antes: aprovecha los caracteres de escape:
Use inodes:
Cada archivo o directorio tiene una estructura de datos especial asociada a él llamada inodo, a la que hace referencia un número decimal particular. Entonces puede usar eso para ubicar indirectamente el archivo con un inodo particular a través del
find
comando, y hacer algo con él:Evite tratar con archivos individuales cuando puede usar glob
Cuando no tenga que lidiar con archivos individuales, simplemente aproveche el
*
carácter glob en el shell y cite las variables al pasarlas a otros comandos. Hace que lidiar con nombres de archivo difíciles sea mucho más fácil:Tenga en cuenta el uso de
./
: una protección contra los nombres de archivo que pueden contener caracteres principales-
.fuente
Para abrir una carpeta que contiene un espacio rodearla entre comillas como
cd "Some Directory"
o escapar del espacio con una barra invertida, como:cd /home/kudic/Radna\ površina
.fuente
cd /home/kudic/Radna\ površina
'Radna površina'
), si no desea que las variables de entorno ($VARNAME
) se expandan y los comandos se encierren en comillas inversas o$()
se ejecuten (o si hay comillas dobles en el nombre del archivo).Si este directorio está en su carpeta de inicio, escriba:
de lo contrario dar ruta absoluta:
si hay una comilla doble en el nombre del archivo, entonces escape con
\"
fuente
Otra opción, aunque no la mejor en este caso, es usar comodines. Puedes probar:
cd *Torino*
Es mejor usar este método cuando hay una palabra o frase distinta en el nombre de un directorio que otros no comparten. Por ejemplo, tengo puntos de montaje / media / DataSSD y / media / DataHDD. El autocompletado no funciona hasta que escribo casi la mitad del nombre, así que para acceder a mi partición de HDD solo escribo
cd /media/*HD*
fuente