Quero entrar na seguinte pasta no terminal:
Milano, Torino (Jan)-Compressed
Como devo escrever o comando cd
para entrar neste diretório?
Espaços e vários outros caracteres especiais como \
, *
, )
, (
e ?
causar problemas quando tento usá-los na linha de comando ou scripts de, por exemplo:
$ 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 ?
( ) * ? \
Como insiro nomes de arquivos ou diretórios que contêm caracteres especiais no terminal em geral?
command-line
filename
cd-command
Pomario
fonte
fonte
Respostas:
Esse comando é ambíguo porque os espaços são normalmente usados para separar argumentos. O cd não sabe o que você quer fazer, mas você tem duas possibilidades para resolvê-lo:
Você " mascara " os espaços (e todos os outros caracteres especiais) para que o terminal saiba que você quer dizer o espaço como um personagem e não como um separador:
Ou você coloca o nome ou o caminho da pasta entre aspas :
fonte
Uma pequena dica: conclusão da guia ;-)
cd Mi
(ou mais letras, se necessário) e pressionar Tab. O Terminal ajudará você, completando as demais palavras.Outra maneira: arrastar e soltar
cd
primeiro e depois arraste e solte o diretório no terminal e pressione enter.fonte
Escreva como:
Caso contrário, ele será tratado
Milano,
como o nome da pasta. Isso acontece devido aos espaços no nome da pasta. Como alternativa, escape a alguns dos caracteres especiais:fonte
tl; dr : para citar um caractere especial, escape-o com uma barra invertida
\
ou coloque-o entre" "
aspas duplas ou simples' '
. Tab ↹A conclusão cuida da citação adequada.O que você está pedindo é chamado de Citação :
Citando com o caractere de escape
\
Portanto, para inserir um diretório ou arquivo com um caractere especial, escape deste último com
\
, por exemplo:bash
A conclusão programável de (ou seja, Tab ↹conclusão) escapa automaticamente caracteres especiais com o caractere de escape\
.Citando aspas duplas
" "
Portanto, para inserir um diretório ou arquivo com um caractere especial, escape pelo menos uma parte posterior ou maior do nome do arquivo ou caminho com aspas duplas, por exemplo:
Como
$
,`
e!
manter o seu significado especial dentro de aspas duplas, Parâmetro de expansão , comando de substituição , expansão aritmética e história da expansão são realizadas em strings delimitadas por aspas.Citando aspas simples
' '
Portanto, para inserir um diretório ou arquivo com um caractere especial, escape pelo menos uma parte posterior ou maior do nome do arquivo ou caminho com aspas duplas, por exemplo:
Você pode encontrar mais informações sobre cotação em
man bash
/ QUOTING , no wiki.bash-hackers.org e no tldp.org .fonte
Strings do tipo C e $ 'string'
Entre outras coisas, pode-se usar o
$'...'
tipo de citação para usar caracteres de barra invertida ANSI-C como\n
e\t
, incluindo aqueles que você mencionou. No manual do bash 4.3:Isso é particularmente útil em arquivos que contêm novas linhas, guias, quando você está escrevendo linhas awk complexas, nas quais é necessário usar maneiras diferentes de distinguir entre aspas simples e duplas, quando os nomes de arquivos contêm mishmash de aspas simples / duplas, etc.
Por exemplo, criando e listando esses arquivos:
Você pode usar valores hexadecimais de caracteres, como:
printf
Mesma idéia de antes - tire proveito dos caracteres de escape:
Use inodes:
Todo arquivo ou diretório possui uma estrutura de dados especial associada, chamada inode, que é referenciada por um número decimal específico. Portanto, você pode usar isso para localizar indiretamente o arquivo com um inode específico por meio do
find
comando, e fazer algo com ele:Evite lidar com arquivos individuais quando usar o glob
Quando você não precisar lidar com arquivos individuais, basta tirar proveito do
*
caractere glob no shell e citar variáveis ao passá-los para outros comandos. Torna muito mais fácil lidar com nomes de arquivos difíceis:Observe o uso de
./
- uma salvaguarda contra nomes de arquivos que podem conter nomes principais-
.fonte
Para abrir uma pasta que contém um espaço cercá-lo entre aspas como
cd "Some Directory"
ou escapar do espaço com uma barra invertida, como:cd /home/kudic/Radna\ površina
.fonte
cd /home/kudic/Radna\ površina
'Radna površina'
), se você não deseja que variáveis de ambiente ($VARNAME
) sejam expandidas e comandos entre backticks ou$()
executados (ou se houver aspas duplas no nome do arquivo).Se esse diretório estiver na sua pasta pessoal, digite:
senão dê caminho absoluto:
se houver uma citação dupla no nome do arquivo, escape com
\"
fonte
Outra opção, embora não seja a melhor nesse caso, é usar caracteres curinga. Podes tentar:
cd *Torino*
É melhor usar esse método quando houver uma palavra ou frase distinta no nome de um diretório não compartilhado por outras pessoas. Por exemplo, tenho pontos de montagem / media / DataSSD e / media / DataHDD. O preenchimento automático não funciona até que eu digite quase metade do nome. Para acessar minha partição do disco rígido, basta digitar
cd /media/*HD*
fonte