¿Cómo eliminar archivos comenzando con doble guion?

Tengo algunos archivos en mi máquina Unix que comienzan con

-- 

por ejemplo, --testings.html

Si trato de eliminarlo, aparece el siguiente error:

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

Lo intenté

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

pero nada funciona.

¿Cómo puedo eliminar esos archivos en la terminal?

 rm -- --testings.html 

La opción -- le dice a rm que trate todos los argumentos adicionales como nombres de archivo, no como opciones, incluso si comienzan con - .

Esto no es particular al comando rm. La función getopt lo implementa y muchos (¿todos?) Comandos al estilo UNIX lo tratan de la misma manera: -- termina el procesamiento de opciones, y todo lo que sigue es un argumento regular.

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

 rm -- --somefile 

Mientras eso funciona, es una solución que se basa en el uso de getopts para analizar sus opciones. Hay aplicaciones que hacen su propio análisis sintáctico y vomitarán sobre eso también (porque es posible que no implementen necesariamente la lógica ” -- significa fin de las opciones”).

Por eso, la solución que debe conducir a través de su cráneo es esta:

 rm ./--somefile 

Siempre funcionará, porque de esta manera tus argumentos nunca comienzan con un - .

Además, si intentas crear scripts de shell realmente decentes; técnicamente deberías poner ./ al frente de todas las expansiones de parámetros de tu nombre de archivo para evitar que tus scripts se rompan debido a la entrada del nombre de archivo funky (o para evitar que sean abusados ​​/ explotados para hacer cosas que no deberían hacer: por ejemplo, rm borrará archivos pero omitirá directorios, mientras que rm -rf * eliminará todo. Pasar un nombre de archivo ” -rf ” a un script o touch ~victim/-rf alguien touch ~victim/-rf ‘ing podría usarse de esta manera para cambiar su comportamiento con malas consecuencias).

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

 rm -- --testings.html 

Otra forma de hacerlo es usar find … -name “- *” -delete

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

Para un enfoque más general para eliminar archivos con caracteres imposibles en el nombre de archivo, una opción es usar el inode del archivo.

Se puede obtener a través de ls -i .

p.ej

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

Y borrarlo, con la ayuda de find:

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

Este proceso puede ser beneficioso cuando se trata de una gran cantidad de archivos con peculiaridades de nombre de archivo, ya que puede ser fácilmente guionado.

 rm ./--testings.html 

o

 rm -- --testings.html