unlink -rf
Ou
rm -- -rf
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.
Outra opção:
rm ./-rf
... colocar seu diretório atual é aquele em que o arquivo reside.
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á).
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.
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.
Se você quer apenas ter certeza:
mv -- -rf remove.-rf
[[check]]
rm remove.-rf
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
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.
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).
Da última vez que tive esse problema, resolvi com:
python
import os
os.remove ("- rf")
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 #
rm - -rf a maioria das ferramentas do gnu aceitam - como marcador de fim de opções