Qual comando eu preciso usar para remover um arquivo chamado '-rf'?

67

Eu fiz algo louco em algum momento que criou um arquivo chamado -rf no meu sistema de arquivos.
Agora não consigo descobrir como excluí-lo ...

Eu tentei:

rm "-rf"
rm \-rf

Estes apenas saem imediatamente, arrgh!

Alguém sabe como remover esse arquivo? De preferência sem limpar acidentalmente minha pasta inteira.

    
por Pierre-Antoine LaFayette 06.10.2010 / 00:06

12 respostas

126
unlink -rf

Ou

rm -- -rf
    
por 06.10.2010 / 00:07
60

Outra opção:

rm ./-rf

... colocar seu diretório atual é aquele em que o arquivo reside.

    
por 06.10.2010 / 00:10
34

Como alternativa, você sempre pode editar o diretório e remover o arquivo dessa maneira.

vim .

e, em seguida, basta excluir a linha com o arquivo (usando D, o dd não funcionará).

    
por 06.10.2010 / 00:36
25

Uma técnica genérica para excluir nomes de arquivos estranhos é usar.

 ls -li

para encontrar o número de inode do arquivo e, em seguida, usar.

find ./ -inum <number of file> -delete

Não há necessidade de lembrar de todos os casos especiais.

    
por 06.10.2010 / 00:48
17

Mesmo que eu saiba sobre o truque "rm - -filename", geralmente quando eu de alguma forma obtenho um arquivo com um líder - em seu nome que eu quero remover eu inicio um gerenciador de arquivos GUI e faço de lá, para elimine a possibilidade de erros.

    
por 06.10.2010 / 00:13
9

Se você quer apenas ter certeza:

 mv -- -rf remove.-rf
 [[check]]
 rm remove.-rf
    
por 06.10.2010 / 09:53
4

Apenas no caso de você estar em algum Unix não-GNU onde você se sente de volta à idade da pedra (sem -- de sintaxe, sem -inum para encontrar, nenhum comando unlink, seu editor recusa a edição de diretórios etc. etc.) você ainda pode se ajudar:

find . -name '-rf' -print | xargs rm -i

Isso fará com que o find alimente todos os possíveis candidatos a rm, o que, por sua vez, solicitará permissão / negação para cada arquivo que for alimentado.

No caso de seu rm nem sequer suportar a opção -i (HP-UX 10.2 no PA-RISC 1.1 alguém?), tenha mais cuidado:

find . -name '-rf' -print
# check that find's output is exactly and only what you need to delete
find . -name '-rf' -print | xargs rm
    
por 06.10.2010 / 12:16
3

Com suporte resposta do jleedev , eu melhoraria com:

rm -i -- -rf

para estar no modo interativo e pedir confirmação, para que você tenha certeza do que está excluindo. (embora a solução esteja bem. é simplesmente para sua paz de espírito)

Na verdade, até use isso:

\rm -i -- -rf

para ter certeza de que você não está usando nenhum alias.

    
por 06.10.2010 / 13:10
2

Como já foi sugerido, sempre usei a sintaxe

rm -rf -- filename

quando eu tive que remover um arquivo com um traço como prefixo porque o - diz ao comando que ele não procura por nenhum outro parâmetro, mas apenas nomes de arquivo.

Mantendo isso em mente, para proteger minha pasta importante por exclusão acidental de arquivos, fui usado para criar um arquivo vazio chamado simplesmente -i que normalmente é colocado no topo da lista de arquivos quando resolvendo a pesquisa *. Então o comando

rm -rf *

quando excuted na minha pasta protegida é explodido, executando dureing, no comando:

rm -rf -i filename1 filename2 .... (all the other files in the folder)

e o shell, em vez de excluir tudo imediatamente, para de solicitar uma confirmação (como a opção -i requer).

    
por 06.10.2010 / 10:24
2

Da última vez que tive esse problema, resolvi com:

python

import os

os.remove ("- rf")

    
por 06.10.2010 / 18:30
1

martin clayton está certo.

É muito simples e lógico. Se as opções existirem, será sempre -XXX ou --CCCC , se você colocar um ./ ou o caminho completo -rf não poderá ser considerado como uma opção e será considerado como uma sequência normal.

Funciona com "todos" nomes de arquivos estranhos.

#pwd
/tmp/TEST
#touch ./-rf
#ls 
-rf
#rm ./-rf 
#ls
#
    
por 06.10.2010 / 10:40
1

rm - -rf a maioria das ferramentas do gnu aceitam - como marcador de fim de opções

    
por 06.10.2010 / 11:04

Tags