Hola a todos de nuevo, foto de Eloy Mier Pérez

De vez en cuando, normalmente debido a entradas anteriores, el sistema acaba teniendo algunos nombre de ficheros extraños o peculiares. De forma habitual son fácilmente eliminables del sistema, pero ¿que pasaría si nos encontramos con un fichero cuyo nombre comienza por – (por ejemplo -file o incluso -f)?, el comando:

rm -file

no funcionará. rm entenderá que se le están pasando cuatro opciones -f, -i, -l y por ultimo -e, y finalizará en la opción -l, por que no es una opción válida.

Podrías intentar usando un carácter de escape en el shell de la siguiente forma:

rm \-file

No obstante, si piensas un poco en lo que esta sentencia hace te darás cuenta de que así tampoco funcionará. El shell verá el código de escape, lo eliminará y pasará completo -file al comando rm; por lo tanto nos encontraremos con el mismo problema. Lo que necesitamos es escapar el comando rm, no el shell.

Existen varias formas de solucionar esto. La primera es usando --. Esta opción la usan muchos comandos para indicar el fin de las opciones. Si quisieses crear un directorio con nombre -test y posteriormente quisieses borrar ese directorio y todo su contenido el siguiente comando debiera funcionar:

rm -rf -- -test

-rf establece las opciones iniciales; el -- señala el final de las opciones, y que el resto después de esa señal debe ser pasado tal cual al comando. En el caso que nos ocupa, es el nombre del directorio a borrar.

Puedes probar con los siguientes comandos:

mkdir -- -test
ls -l -- -test
rm -rf -- -test

La otra opción posible es especificar el directorio del fichero. Para borrar el fichero -file en el directorio actual, debemos usar:

rm ./-file

Esta solución debería funcionar con otros comandos también. Para probar puedes ejecutar:

touch ./-file
ls -l ./-file
rm ./-file

Desde este momento, cuando te encuentres con este tipo de problemas en los nombres de fichero en tus directorios, ya no creo que tengas problema para dar buena cuenta de ellos ¿verdad?

Un saludo a tod@s y hasta la próxima.

You must be logged in to post a comment.