Me lo ha preguntado esta mañana un compañero en el trabajo. Que como se hacia para renombrar o mover un fichero por ejemplo llamado -fichero.txt (un fichero cuyo nombre empieza con un guion) con la consola. Desde el interface grafico es sencillo, te situas sobre el fichero en cuestion y pulsas la tecla «F2», asi te permite escribir un nuevo nombre, o desde el menu emergente que sale al usar el clic derecho eliges la opcion «Renombrar«.
Pero desde consola si quieres renombrar, eliminar, o copiar estos ficheros tienes que concatenarles delante el «./». Ejemplo:
mv -fichero.txt otro.txt (te da error)
mv ./-fichero.txt ./otro.txt (ya te renombra el fichero)
Por cierto este truco lo he leido en Linux by Examples y tiene algun que otro comando interesante. Consultad su web (en ingles).
Gracias por la info!
Ese error ocurre porque el shell (bueno, en realidad el comando) interpreta cada palabra que empiece por un guión (o dos) como una opción, no un argumento. Por ejemplo:
% mv f g h
movería los ficheros «f» y «g» a «h» (que debería ser un directorio). Pero:
% mv -f g h
tiene dos argumentos («g» y «h»), y una opción («-f»), lo cual se interpreta como «renombra ‘g’ a ‘h’, y encima fuérzalo (-f), es decir, sobreescribe ‘h’ aunque exista de antemano’
La solución que propones es la «ingeniosa»: usas un argumento («./-fichero») que significa lo mismo que lo que quieres decir («-fichero»), pero no empieza por «-«. La solución más «correcta» (en realidad yo prefiero la ingeniosa) es usar el terminador de opciones («–«):
% mv — -fichero destino
Con el «–» decimos al comando mv que todo lo que va detrás son argumentos, aunque empiecen por «-» o «–«. Las opciones (como «-f») tienen que ir antes del «–«.