Come rimuovere i file che iniziano con il doppio trattino?

Ho alcuni file sul mio computer Unix che iniziano con

-- 

per esempio --testings.html

Se provo a rimuoverlo ottengo il seguente errore:

 cb0$ rm --testings.html rm: illegal option -- - usage: rm [-f | -i] [-dPRrvW] file ... unlink file 

Provai

 rm "--testings.html" || rm '--testings.html' 

ma niente funziona.

Come posso rimuovere tali file sul terminale?

 rm -- --testings.html 

L’opzione -- indica a rm di trattare tutti gli altri argomenti come nomi di file, non come opzioni, anche se iniziano con - .

Questo non è specifico per il comando rm. La funzione getopt lo implementa e molti (tutti?) I comandi in stile UNIX lo trattano allo stesso modo: -- interrompe l’elaborazione delle opzioni, e qualsiasi cosa dopo che è un argomento regolare.

http://www.gnu.org/software/hello/manual/libc/Using-Getopt.html#Using-Getopt

 rm -- --somefile 

Mentre funziona, è una soluzione che si basa su rm utilizzando getopts per analizzare le sue opzioni. Ci sono applicazioni là fuori che fanno le loro analisi e vomiteranno anche su quello (perché potrebbero non necessariamente implementare la logica ” -- significa fine delle opzioni”).

Per questo motivo, la soluzione che dovresti guidare attraverso il tuo cranio è questa:

 rm ./--somefile 

Funzionerà sempre, perché in questo modo i tuoi argomenti non iniziano mai con un - .

Inoltre, se stai cercando di creare script di shell davvero decenti; dovresti mettere tecnicamente ./ di fronte a tutte le espansioni dei parametri del tuo nome per impedire che gli script si rompano a causa dell’input funky del nome del file (o per impedire che vengano abusati / sfruttati per fare cose che non dovrebbero fare: per esempio, rm cancellerà i file ma salterà le directory, mentre rm -rf * cancellerà tutto. Passando un nome di file ” -rf ” a uno script o qualcuno touch ~victim/-rf ‘in questo modo potrebbe essere usato per cambiare il suo comportamento con conseguenze negative).

O rm -- --testings.html o rm ./--testings.html .

 rm -- --testings.html 

Un altro modo per farlo è usare find … -name “- *” -delete

 touch -- --file find -x . -mindepth 1 -maxdepth 1 -name "--*" -delete 

Per un approccio più generalizzato per l’eliminazione di file con caratteri impossibili nel nome file, un’opzione è quella di utilizzare l’inode del file.

Può essere ottenuto tramite ls -i .

per esempio

 $ ls -lai | grep -i test 452998712 -rw-r--r-- 1 dim dim 6 2009-05-22 21:50 --testings.html 

E per cancellarlo, con l’aiuto di trovare:

 $ find ./ -inum 452998712 -exec rm \{\} \; 

Questo processo può essere utile quando si ha a che fare con molti file con le peculiarità dei nomi dei file, in quanto può essere facilmente copiato.

 rm ./--testings.html 

o

 rm -- --testings.html