Como remover um arquivo com nome começando com “-r” usando cli [duplicate]

5

Eu tenho criado arquivos com nomes estranhos de vez em quando, por exemplo

$ls -rthl
$-rw-r--r--  1 shamil hep  290 Aug 13 11:58 -rf

E, curiosamente, é impossível remover este arquivo com

rm -f -rf

Eu sei que preciso escapar dos símbolos especiais como "-", então a questão é clara. E eu costumava conhecer a solução, mas desde então esqueci.

Como faço para excluí-lo corretamente?

Eu tentei coisas assim

rm -f \-rf

mas sem sucesso.

    
por Chikipowpow 17.12.2013 / 21:20

3 respostas

13

-- switch significa: Fim dos sinalizadores, tudo depois é considerado um nome de arquivo . Então você pode fazer:

rm -- -rf

Incluir o caminho completo para o arquivo também funciona:

rm /full/path/to/-rf

Na verdade, isso é meio engraçado, mas esta linha de comando pode lhe dar a resposta:)

$man rm | cat | grep -B4 -A3 -- "rm --"

To remove a file whose name starts with a '-', for example '-foo', use 
one of these commands:

rm -- -foo
rm ./-foo
    
por 17.12.2013 / 21:23
8

Você pode fazer

rm -rf ./-rf

Isso fará com que -rf não comece com - .

    
por 17.12.2013 / 21:24
2

de outra forma:

find -name "-rf" -exec rm {} \;
    
por 18.12.2013 / 00:51