"Después del juego es antes del juego"
Sepp Herberger

viernes, 12 de diciembre de 2014

Copiar un mismo fichero a múltiples ubicaciones en Linux (y, de regalo, en Windows).

Cuando tenemos los homes de nuestros usuarios alojados en un servidor NFS frecuentemente nos encontramos con que tenemos que aplicar una configuración concreta a todos ellos. En Linux eso suele ser tan sencillo como copiar un fichero a una ruta concreta dentro del home. En mi caso me he visto en la necesidad de copiar un fichero mimeTypes.rdf dentro de la configuracion Firefox de cada usuario de mi red.

El problema es que la configuración Firefox no está dentro de una ruta fija en el home, sino que está dentro de .mozilla/firefox/<perfil>.default/mimeTypes.rdf, siendo <perfil> una ristra de números y letras que identifica el perfil del usuario.

¿Hay manera de copiar el mimeTypes.rdf independientemente de cual sera el nombre del directorio de perfil?. Pues si, con:

find /home -name 'mimeTypes.rdf' -print -exec cp -f /root/mimeTypes.rdf {} \;

Con esto buscamos todos los mimeTypes.rdf que hay en todos nuestros homes y los sobrescribimos con el que hay en /root/mimeTypes.rdf.

Si quisiéramos poner un acceso directo en todos los escritorios (independientemente de que el acceso directo existiese previamente o no) haríamos:

find /home -name 'Desktop' -print -exec cp -f /root/Rayuela.desktop {} \;

Ojo, asumimos que el escritorio está en la carpeta Desktop.

Bueno, pues hecho esto en los Linux quería hacerlo también en mis Windows. El problema es que los "homes" en los Windows están en las máquinas locales, y que no parece que se pueda hacer mediante código y tengamos que ir copiando cuenta por cuenta. Pues no, para mi sorpresa resulta que se puede hacer así:

for /f "tokens=*" %a  in ('dir /b/s "c:\documents and settings\mimetypes.rdf"') do copy /Y c:\ficheros\mimetypes.rdf  "%a"

Comentando:

  • Asumimos que todas las cuentas de Windows están en el directorio c:\documents and settings\*
  • El fichero origen está en c:\ficheros\mimetypes.rdf
  • El comando 'dir /b/s "c:\documents and settings\mimetypes.rdf"' es el meollo: busca dentro de "c:\documents and settings" todas las apariciones de mimetypes.rdf y devuelve su ruta completa.
  • Si metemos el código anterior dentro de un fichero .BAT la variable "%a" debe ser sustituida por "%%a" en sus dos apariciones. Cosas de los batch scripts.

Bueno, pues ha sido una sorpresa que el intérprete de comandos de Windows pueda hacer esto. ¡Larga vida a la línea de comandos!, dejemos el ratón y el copiar y pegar cual día de la marmota para los usuarios productivos.

No hay comentarios:

Publicar un comentario