No se puede eliminar un archivo que tiene un nombre como un argumento de comando [duplicado]

20

Inadvertidamente creé un archivo llamado -r en mi directorio personal. Ahora no puedo deshacerme de él:

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

Otros intentos:

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

Otro:

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

¿Hay alguna forma de eliminar este archivo sin eliminar todo el directorio?

    
pregunta Justin 12.06.2014 - 08:47

5 respuestas

25

En este caso, debe usar el doble guión ( -- ) en los argumentos del comando.

El propósito de esto es decirle al comando que lo que sigue no debe tomarse como un argumento para el comando sino como una entrada simple. En el caso de rm , un nombre de archivo o directorio.

Así que escribe rm -- -r y deberías deshacerte de este archivo.

    
respondido por el Benoit 12.06.2014 - 08:49
44

Hay muchas maneras de hacerlo:

  1. Use el -- que indica el final de los indicadores de opción y el comienzo de la lista de argumentos para muchos programas (incluido rm ).

    rm -- -r
    
  2. Usar la ruta completa

    rm /home/you/directory/-r
    

    o, desde el mismo directorio (su directorio actual se conoce como . ):

    rm ./-r
    
  3. Usar find

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

    o, para obtener todos esos archivos

    find . -name "-*" -exec rm {} \;
    
  4. Usa un hack feo. Mueva todo a un directorio diferente (esto fallará para el archivo -r por la misma razón que rm lo hace) y luego elimine el directorio original (que eliminará el archivo) y vuelva a mover todo. Entonces, suponiendo que tu archivo -r está en ~/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
    
respondido por el terdon 12.06.2014 - 08:59
8

También puede eliminar dichos archivos (comenzando con '-') con este comando:

rm ./-r

Consulte la página del manual de rm:

  

Para eliminar un archivo cuyo nombre comienza con un '-', por ejemplo '-foo', use       uno de estos comandos:

rm -- -foo

rm ./-foo
    
respondido por el Sylvain Pineau 12.06.2014 - 08:59
2

O bien, podría especificar la ruta completa del directorio en el comando rm ,

Ejemplo:

rm -rf ~/Desktop/-r
    
respondido por el Avinash Raj 12.06.2014 - 09:05
1

También puede usar el comando desvincular (si lo tiene), que no toma opciones, y un solo argumento. Entonces, unlink -- -r eliminará un archivo llamado -r

    
respondido por el Abigail 12.06.2014 - 13:27

Lea otras preguntas en las etiquetas