Como posso remover um arquivo ou diretório chamado "\"?

20

Estou usando o terminal em uma máquina Ubuntu e há um arquivo que gostaria de excluir. O nome do arquivo é \(apenas uma barra invertida).

Agora normalmente eu faria

rm filename

No entanto, se eu fizer rm \isso, acho que estou tentando escrever um comando com várias linhas.

Como posso excluir este arquivo? Eu sei que eu poderia apenas usar o sistema de arquivos da GUI, mas isso não é muito eficiente.

Então, como posso excluir (no terminal) um arquivo chamado \?

Nosrettap
fonte
1
Por que você tem um arquivo chamado isso? (Nem sequer deixe-me colocá-lo em um codebloco aqui neste comentário!)
AJMansfield
7
Mais divertido é tentar excluir um arquivo chamado <BEL>, também conhecido como Ctrl-G, se bem me lembro. Toda vez que você fazer um ls os bips do teclado em você até que você (a) descobriu o invisível arquivo; e (b) determinou como excluir um arquivo com apenas um caractere não imprimível em seu nome.
Pieter Geerkens
1
Mais importante, como você exclui um arquivo chamado "/"?
Curt
1
@Curt fsck. A sério. Se um arquivo nomeado /existir, seu sistema de arquivos está corrompido.
Zwol 30/07/2013
2
Eu sempre gostei do arquivo chamado *...
RBerteig

Respostas:

48

Use rm \\(escape da barra invertida com outra barra invertida). Observe que isso também funciona de maneira semelhante, para diretórios nomeados \(usando rmdirou rmcom o -rsinalizador).

Exemplo:

> demonstração do mkdir
> demo de cd
> toque em \\
> ls -l
0 total
-rw ------- 1 hennes usuários 0 de jul 29 20:25 \
> rm \\
> ls -l
0 total
Hennes
fonte
3
Ou, sob o mesmo princípio, rm '\'(mas não rm "\" ).
evilsoup
2
@evilsoup apenas para fornecer alguns esclarecimentos adicionais sobre isso, o \ caractere é usado como caractere de escape em cadeias delimitadas por aspas duplas. O provérbio rm "\"será analisado em uma sequência não fechada, pois a segunda aspas é usada com um caractere de escape (e, portanto, será analisada como o próprio caractere de aspas duplas, e não no final de uma sequência). Assim, o terminal aguardará até que você termine a sequência com outra ". O método equivalente para usar aspas duplas aqui seria rm "\\"(o que é diretamente equivalente a ambos rm '\'e rm \\ , como você já confirmou).
Breakthrough
15

Uma tática geral para excluir manualmente arquivos com caracteres estranhos em seus nomes é

rm -i ./*

Isso solicitará que você escolha se deseja excluir ou não cada arquivo no diretório.

zwol
fonte
3
Ou, solteiro, era um único caractere. rm -i ./?
Hennes
1
Sim. Se você pode escrever um globo mais específico do que ./*, é sempre uma boa ideia, especialmente ao fazer algo destrutivo.
Zwol 30/07/2013
4
+1 por prefixar seu glob com./
evilsoup
12

Você também pode desvincular referenciando o inode de um arquivo

linus ~/test $ touch \\
linus ~/test $ ls -li
total 0
15204561 -rw-r--r-- 1 pat sudo 0 Jul 29 23:03 \
linus ~/test $ find . -inum 15204561 -exec rm -v {} \;
removed `./\\'
linus ~/test $ ls -li
total 0
linus ~/test $ 
joshbaptiste
fonte
0

Por favor, verifique o inode do arquivo primeiro. ls -li

137791 -rw-rw-r--. 1 svr svr 366 11 de mar 15:57

O inode de "\" é "137791 e, em seguida, use o comando find para excluir" \ "com o número do inode.

encontrar . -inum 137791 -exec rm -i {} \;

rm: remove o arquivo normal `./ \ '? sim

"\" será removido então.

BALVINDER SINGH
fonte