Impossibile rimuovere un file che ha un nome come un argomento di comando [duplicato]

20

Ho inavvertitamente creato un file chiamato -r nella mia home directory. Ora non posso sbarazzarmene:

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

Altri tentativi:

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

Un altro:

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

C'è un modo per rimuovere questo file senza eliminare l'intera directory?

    
posta Justin 12.06.2014 - 10:47

5 risposte

25

In questo caso devi usare il double-dash ( -- ) negli argomenti del comando.

Lo scopo è di dire al comando che ciò che segue non deve essere preso come argomento per il comando ma come input semplice. Nel caso di rm , un nome di file o directory.

Quindi digita rm -- -r e dovresti sbarazzarti di questo file.

    
risposta data Benoit 12.06.2014 - 10:49
44

Ci sono molti modi per farlo:

  1. Utilizza -- che indica la fine dei flag di opzione e l'inizio dell'elenco di argomenti per molti programmi (incluso rm ).

    rm -- -r
    
  2. Utilizza il percorso completo

    rm /home/you/directory/-r
    

    o, dalla stessa directory (la tua directory corrente è chiamata . ):

    rm ./-r
    
  3. Usa find

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

    o, per ottenere tutti questi file

    find . -name "-*" -exec rm {} \;
    
  4. Usa un brutto trucco. Sposta tutto in una directory diversa (questo fallirà per il file -r per la stessa ragione per cui fa rm ) e quindi cancellerà la directory originale (che rimuoverà il file) e rimetterà tutto indietro. Pertanto, supponendo che il tuo file -r sia in ~/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
    
risposta data terdon 12.06.2014 - 10:59
8

Puoi anche cancellare tali file (iniziando con un '-') con questo comando:

rm ./-r

Vedi la pagina man di rm:

  

Per rimuovere un file il cui nome inizia con un '-', ad esempio '-foo', usa       uno di questi comandi:

rm -- -foo

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

Oppure puoi specificare il percorso completo della directory nel comando rm ,

Esempio:

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

Puoi anche usare il comando di scollegamento (se ce l'hai), che non accetta opzioni e un singolo argomento. Pertanto, unlink -- -r rimuoverà un file chiamato -r

    
risposta data Abigail 12.06.2014 - 15:27

Leggi altre domande sui tag