Não é possível remover um arquivo que tenha um nome como um argumento de comando [duplicado]

20

Eu inadvertidamente criei um arquivo chamado -r no meu diretório pessoal. Agora não consigo me livrar disso:

rm -rf
rm: missing operand
Try 'rm --help' for more information.

Outras tentativas:

rm /-/r
rm: cannot remove ‘/-/r’: No such file or directory

Outro:

rm \-r
rm: missing operand
Try 'rm --help' for more information.

Existe uma maneira de remover este arquivo sem excluir todo o diretório?

    
por Justin 12.06.2014 / 10:47

5 respostas

25

Neste caso você tem que usar o traço duplo ( -- ) nos argumentos do seu comando.

O propósito é dizer ao comando que o que segue não deve ser tomado como um argumento para o comando, mas uma simples entrada. No caso de rm , um nome de arquivo ou diretório.

Então digite rm -- -r e você deve se livrar deste arquivo.

    
por Benoit 12.06.2014 / 10:49
44

Existem muitas maneiras de fazer isso:

  1. Use o -- , que significa o fim dos flags de opção e o início da lista de argumentos para muitos programas (incluindo rm ).

    rm -- -r
    
  2. Use o caminho completo

    rm /home/you/directory/-r
    

    ou, no mesmo diretório (seu diretório atual é chamado de . ):

    rm ./-r
    
  3. Use find

    find . -name "-r" -exec rm {} \;
    

    ou, para obter todos esses arquivos

    find . -name "-*" -exec rm {} \;
    
  4. Use um hack feio. Mova tudo para um diretório diferente (isso falhará no arquivo -r pela mesma razão que o rm ) e exclua o diretório original (que removerá o arquivo) e mova tudo de volta novamente. Então, supondo que seu arquivo -r esteja em ~/foo :

    $ mkdir ~/bar
    $ for f in *; do mv "$f" ../bar/; done
    mv: invalid option -- 'r'
    Try 'mv --help' for more information.
    $ rm -rf ~/foo
    $ mkdir ~/foo && cd ~/foo
    $ mv ~/bar/* .
    $ rmdir ~/bar
    
por terdon 12.06.2014 / 10:59
8

Você também pode excluir esses arquivos (começando com '-') com este comando:

rm ./-r

Veja a página man rm:

  

Para remover um arquivo cujo nome comece com um '-', por exemplo '-foo', use       um desses comandos:

rm -- -foo

rm ./-foo
    
por Sylvain Pineau 12.06.2014 / 10:59
2

Ou você pode especificar o caminho completo do diretório no comando rm ,

Exemplo:

rm -rf ~/Desktop/-r
    
por Avinash Raj 12.06.2014 / 11:05
1

Você também pode usar o comando unlink (se tiver), que não tem opções, e um único argumento. Portanto, unlink -- -r removerá um arquivo chamado -r

    
por Abigail 12.06.2014 / 15:27