varios ultimas script para lineas linea eliminar con caracter borrar archivos bash unix filenames

bash - ultimas - sed eliminar caracter



¿Cómo eliminar archivos comenzando con doble guion? (7)

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?


O bien rm -- --testings.html o 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 -- --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).


rm -- --testings.html


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 ./--testings.html

o

rm -- --testings.html