Come posso rimuovere un file o una directory chiamata "\"?


20

Sto usando un terminale su una macchina Ubuntu e c'è un file che vorrei eliminare. Il nome del file è \(solo una barra rovesciata).

Adesso di solito lo farei

rm filename

Tuttavia, se lo faccio rm \, penso che sto cercando di scrivere un comando multilinea.

Come posso eliminare questo file? So che potrei semplicemente usare il file system della GUI, ma non è molto efficiente.

Quindi, come posso eliminare (nel terminale) un file chiamato \?


1
Perché hai un file chiamato così? (Non mi permette nemmeno di metterlo in un codeblocco qui in questo commento!)
AJMansfield

7
Più divertente sta cercando di eliminare un file chiamato <BEL>, noto anche come Ctrl-G, se ricordo bene. Ogni volta che fate un ls i bip della tastiera a voi fino a (a) scoprì il invisibile del file; e (b) ha determinato come eliminare un file con un solo carattere non stampabile nel suo nome.
Pieter Geerkens,

1
Ancora più importante, come si elimina un file chiamato "/"?
Curt

1
@Curt fsck. Sul serio. Se /esiste un file chiamato , il tuo filesystem è corrotto.
zwol,

2
Mi è sempre piaciuto il file di nome *me stesso ...
RBerteig

Risposte:


48

Usa rm \\(scappa dalla barra rovesciata con un'altra barra rovesciata). Si noti che questo funziona anche in modo simile, per le directory denominate \(usando uno rmdiro rmcon il -rflag).

Esempio:

> mkdir demo
> cd demo
> tocca \\
> ls -l
totale 0
-rw ------- 1 utenti di hennes 0 lug 29 20:25 \
> rm \\
> ls -l
totale 0

3
O, secondo lo stesso principio, rm '\'(ma non rm "\" ).
evilsoup,

2
@evilsoup solo per fornire ulteriori chiarimenti al riguardo, il \ carattere viene utilizzato come carattere di escape nelle stringhe delimitate da virgolette doppie. Dicendo rm "\"verrà analizzato in una stringa non chiusa, poiché la seconda virgoletta viene utilizzata con un carattere di escape (e quindi verrà analizzata come il carattere di virgoletta doppia stessa, e non la fine di una stringa). Pertanto, il terminale attenderà fino al termine della stringa con un altro ". Il metodo equivalente per usare le virgolette doppie qui sarebbe rm "\\"(che è direttamente equivalente a entrambi rm '\'e rm \\ , come hai già confermato).
Breakthrough

15

Una tattica generale per eliminare manualmente i file con caratteri scomodi nei loro nomi è

rm -i ./*

Questo ti chiederà di scegliere se eliminare o meno ogni file nella directory.


3
Oppure, single era un singolo carattere. rm -i ./?
Hennes,

1
Si. Se riesci a scrivere un glob più specifico di ./*, è sempre una buona idea, specialmente quando fai qualcosa di distruttivo.
zwol,

4
+1 per il prefisso del tuo glob con./
evilsoup

12

Puoi anche scollegare facendo riferimento all'inode di un file

linus ~/test $ touch \\
linus ~/test $ ls -li
total 0
15204561 -rw-r--r-- 1 pat sudo 0 Jul 29 23:03 \
linus ~/test $ find . -inum 15204561 -exec rm -v {} \;
removed `./\\'
linus ~/test $ ls -li
total 0
linus ~/test $ 

0

Controlla prima l'inode del file. ls -li

137791 -rw-rw-r--. 1 svr svr 366 11 marzo 15:57

l'inode di "\" è "137791 e quindi usa il comando find per eliminare" \ "con il numero di inode.

trova . -oro 137791 -exec rm -i {} \;

rm: rimuovere il file normale `./ \ '? sì

"\" verrà rimosso quindi.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.