Estas cosas pasan muy poco a menudo. Tanto, que si no has cacharreado un buen rato con shells, muy posiblemente no hayas tenido la ocasión de conocerlas. Resulta que la sintaxis, cantidad, orden... de los parámetros y opciones de algunas aplicaciones de línea de comandos no siempre está muy clara, y es necesario hacer algunas pruebas antes de dar con el modo de trabajar con ciertas aplicaciones. Ello puede llegar a ocasionar que se creen, por accidente, archivos con nombres variopintos que luego necesitaran de caracteres de escape shell para que el mismo intérprete de comandos o las aplicaciones para gestionar esos ficheros (rm, cp, mv...) no se vuelvan tontos. Ya se que esto no es algo fortuito, pero a modo de ejemplo pongamos: touch \\-p Esto nos creará el archivo con nombre \-p. Genial, y ahora... ¿cómo lo borramos? Si tenemos un desktop con X y gestor de ficheros, sencillo. Incluso si recurrimos al bienaventurado midnight commander saldremos airosos. Pero hay otras maneras de hacerlo usando la misma shell. En este caso nos bastaría un: rm "\-p" Pero, ¿y si tenemos un archivo llamado --hola? Lo podemos crear con: tar cvf --hola algun_archivo ótouch -- -hola Puede que veáis cosas raras y pensaréis que ahí ya la hemos jodío. Pues magia potagia, rm nos salva del aprieto indicándole con -- que a partir de ahí hemos terminado con la lista de opciones: rm -- --hola Nótese que el argumento -- puede ser usado en la mayoría de comandos para indicar lo mismo: que a partir de ese punto ya se ha terminado el paso de parámetros de ejecución a la aplicación, y en todo caso, lo que se le pasa son ficheros. Para entendernos, todo lo que son parámetros (p.ej. ls -l) van antes del --, y lo demás después (p.ej. ls -l -- readme*). En última instancia y como he podido encontrar en una web, también podemos borrar un archivo por su inodo (ahora sí que matamos moscas a cañonazos). En este caso, ¡asegúrate antes de que no tienes enlaces duros que quieras conservar! Los enlaces blandos tienen otro número de inodo, así que no serán borrados en esta operación. La operación se resume a lo siguiente (creo que es autoexplicativa): first64:~# touch -- -piripi first64:~# ln -- -piripi --piripi2 first64:~# ln -s -- -piripi -piripi3 first64:~# ls -li -- *piripi* 32 -rw-r--r-- 2 root root 0 2006-06-07 17:47 -piripi 32 -rw-r--r-- 2 root root 0 2006-06-07 17:47 --piripi2 33 lrwxrwxrwx 1 root root 7 2006-06-07 17:48 -piripi3 -> -piripi first64:~# find . -inum 32 ./-piripi ./--piripi2 first64:~# find . -inum 32 -exec rm {} \; first64:~# ls -li -- -*piripi* 33 lrwxrwxrwx 1 root root 6 2006-06-02 13:37 -piripi3 -> -piripi Para evitar que alguien se pierda, las operaciones que hemos ido haciendo son:
Podríamos también saber el inodo de un fichero con stat, pero apuesto que con ls es más directo y sin tanta información extra. Comentarios (3) |