Sincronización Local de Archivos

Buenas chicos, hoy me he planteado un problema que inicialmente pensé que tenía que ser fácil, pero que no doy con la tecla.

La cuestión es que, por motivos de trabajo, me interesa que un mismo archivo aparezca en diferentes carpetas (una biblioteca común que debo usar en diferentes proyectos), de modo que si cambio el archivo en alguna de esas carpetas, el cambio sea visible automáticamente en las otras (tipo Dropbox).

He visto el comando rsync, pero no estoy seguro de que sea lo que estoy buscando. ¿Alguna idea?

P.D: Esto lo quiero hacer en un ordenador con linux.
A falta de saber mejor que requieres exactamente, ¿no te vale con hacer symlinks del archivo?
JanKusanagi escribió:A falta de saber mejor que requieres exactamente, ¿no te vale con hacer symlinks del archivo?


Creo que no. A ver si consigo explicarme mejor: supongamos que tengo el archivo file.xyz y dos directorios folder1/ y folder2/. Lo que quiero es tener una copia de file.xyz en cada directorio de modo que, si modifico el archivo en uno de ellos, automáticamente se modifique en el otro. Es decir, que esas dos copias del mismo archivo queden sincronizadas.

¿Se entiende mejor lo que busco?
Pues eso lo puedes hacer con symlinks, o hardlinks si por algún motivo al software que acceda a esos archivos no le gustan los simbólicos.
Y si te curras un script básico con rsync? así en el momento en que que haya un cambio se sincroniza en el destino o destinos que especifiques... te dejo un ejemplo:

https://gist.github.com/senko/1154509

Un saludo!
JanKusanagi escribió:Pues eso lo puedes hacer con symlinks, o hardlinks si por algún motivo al software que acceda a esos archivos no le gustan los simbólicos.

yandrot escribió:
JanKusanagi escribió:A falta de saber mejor que requieres exactamente, ¿no te vale con hacer symlinks del archivo?

Creo que no. A ver si consigo explicarme mejor: supongamos que tengo el archivo file.xyz y dos directorios folder1/ y folder2/. Lo que quiero es tener una copia de file.xyz en cada directorio de modo que, si modifico el archivo en uno de ellos, automáticamente se modifique en el otro. Es decir, que esas dos copias del mismo archivo queden sincronizadas.
¿Se entiende mejor lo que busco?


Entiendo que el OP busca tener ese archivo duplicado realmente en el disco, no sólo simbólicos o hardlinks. De lo contrario, efectivamente los simbólicos son la mejor opción. Algunas distros en sus navegadores de archivos crean ya simbólicos directamente, al usar la opción "Crear enlace".

Pero para lo de sincronizar archivos, rsync creo que es la mejor opción, y en su día lo había estado viendo y vi alguna herramienta gráfica para crear las tareas de sincronía.
Por ejemplo, http://askubuntu.com/questions/514963/i ... mand-rsync
Gracias por las respuestas! Efectivamente los enlaces simbólicos no me valen (el enlace aparecería en una carpeta que comparto por Dropbox y el otro usuario sólo vería el enlace sin acceso al propio archivo).

También vi algunas herramientas gráficas, pero por alguna razón sólo me dejaba sincronizar carpetas completas y no archivos. No es del todo grave, pero no era una solución óptima.

Voy a darle un vistazo a la idea del script, a ver cómo lo podría apañar para lo que quiero.
yandrot escribió:Efectivamente los enlaces simbólicos no me valen (el enlace aparecería en una carpeta que comparto por Dropbox y el otro usuario sólo vería el enlace sin acceso al propio archivo).

Los enlaces no tienen por qué ser simbólicos.
JanKusanagi escribió:
yandrot escribió:Efectivamente los enlaces simbólicos no me valen (el enlace aparecería en una carpeta que comparto por Dropbox y el otro usuario sólo vería el enlace sin acceso al propio archivo).

Los enlaces no tienen por qué ser simbólicos.


Pero aún así lo que digo es cierto, ¿no? Si tengo file.xyz en una carpeta local, y un symlink incluido en otro folder/ compartido por Dropbox con user2, user1 no podría ver el contenido de file.xyz, ¿verdad?
No tengo ni idea de cómo funciona Dropbox, pero dudo mucho que vea la diferencia entre 1 archivo y su hardlink (que no symlink, es diferente).

Francamente, creo que te cuesta poco probarlo y comprobar xD
Usar symlinks es lo que se suele recomendar para compartir carpetas que no sean la original de dropbox
http://www.dropboxwiki.com/tips-and-tri ... #LinuxUnix
Bueno, estoy intentando con lo de los symlinks, pero todavía no estoy seguro de que funciona como quiero (necesito que alguien con quien comparto la carpeta haga pruebas).

Me ha sorprendido que sea la forma sugerida de hacerlo, veo que no entiendo bien lo de los symlinks.
yandrot escribió:Gracias por las respuestas! Efectivamente los enlaces simbólicos no me valen (el enlace aparecería en una carpeta que comparto por Dropbox y el otro usuario sólo vería el enlace sin acceso al propio archivo).

También vi algunas herramientas gráficas, pero por alguna razón sólo me dejaba sincronizar carpetas completas y no archivos. No es del todo grave, pero no era una solución óptima.

Voy a darle un vistazo a la idea del script, a ver cómo lo podría apañar para lo que quiero.


Uy, si está Dropbox de por medio quizás te pueda contar mi experiencia con simbólicos de primera mano [sonrisa]

Yo creo que puedes usar simbólicos perfectamente. Imaginémonos que tienes el archivo real guardado en /home/user/archivo.odt y quieres que esté en /home/user/Dropbox/archivo.odt, vendría siendo algo así lo que buscas?

Si creas un enlace simbólico en la propia carpeta Dropbox, apuesto a que el Dropbox subirá el archivo real, no el enlace. Al fin y al cabo, el simbólico es un enlace que las aplicaciones siguen y toman como si fuese el archivo real, no un mero acceso directo, que es un archivo pequeñito que "enlaza" hacia otro archivo o carpeta.

También podrías hacer la cosa al revés, guardar el archivo original en Dropbox y crear un simbólico fuera de Dropbox. Esto yo lo hago mucho en Windows para tener las partidas de los juegos subidas a Dropbox, es muy buena idea [toctoc]

De todas formas no entiendo bien qué intentas conseguir, no podrías directamente guardar en la carpeta de Dropbox el archivo? O hay algo que me estoy pasando por alto? ein?
noentiendero escribió:...
De todas formas no entiendo bien qué intentas conseguir, no podrías directamente guardar en la carpeta de Dropbox el archivo? O hay algo que me estoy pasando por alto? ein?


Lo que tengo es un archivo "recopilatorio" de citas que llamo desde LaTeX (un bibtex, concretamente). Cada vez que necesito una cita, la busco y meto dentro de ese archivo para poder llamarlo desde el principal.

La cuestión es que trabajo en colaboración con más personas, las cuales tienen que tener acceso al archivo concreto (y por simplicidad, ese archivo debe aparecer en la carpeta que comparta con ellos). Como son proyectos diferentes, cada uno tiene una carpeta propia.

Ahora mismo, tengo una copia de ese archivo recopilatorio en cada carpeta y debo ser cuidadoso cuando se modifica en una carpeta para actualizarlo (a mano) en el resto. Lo que quiero es simplemente automatizar esto.
Y un mount -o bind?

Por lo que te he entendido, mantener copias es trabaho extra innecesario y los symlinks no te valen... la mejor opcion parece montar el mismo directorio en varios lugares no?
Yo diría que eso es un hardlink de libro.
Buenas,

he hecho pruebas con hardlinks y symlinks y en ambos casos no funciona como me gustaría. Al modificar un archivo con emacs, los cambios no se aplican al resto de archivos.

He visto cómo podría arreglarlo para emacs (no es difícil), pero si depende de la aplicación no me vale. Esto es para colaborar con varias personas y no puedo controlar qué hacen el resto de usuarios.

Creo que voy a optar por crear un script sencillito (tal y como me sugirió @Adeptus24 ). Ya os diré.
Tanto con un hard/soft link como usando mount -o bind a nivel de directorio cambiando uno cambias todos. Algo va mal en tu prueba xD
yandrot escribió:Buenas,
he hecho pruebas con hardlinks y symlinks y en ambos casos no funciona como me gustaría. Al modificar un archivo con emacs, los cambios no se aplican al resto de archivos.
He visto cómo podría arreglarlo para emacs (no es difícil), pero si depende de la aplicación no me vale. Esto es para colaborar con varias personas y no puedo controlar qué hacen el resto de usuarios.
Creo que voy a optar por crear un script sencillito (tal y como me sugirió @Adeptus24 ). Ya os diré.


Acabo de hacer una prueba (porque nunca lo había hecho en este sentido, sino al contrario, los originales en Dropbox y los simbólicos fuera) y parece que si haces un simbólico dentro de Dropbox, cuando haces algún cambio en el archivo original (o abriendo el simbólico, da lo mismo), no se actualiza en Dropbox. Es este el problema que tienes?
noentiendero escribió:
yandrot escribió:Buenas,
he hecho pruebas con hardlinks y symlinks y en ambos casos no funciona como me gustaría. Al modificar un archivo con emacs, los cambios no se aplican al resto de archivos.
He visto cómo podría arreglarlo para emacs (no es difícil), pero si depende de la aplicación no me vale. Esto es para colaborar con varias personas y no puedo controlar qué hacen el resto de usuarios.
Creo que voy a optar por crear un script sencillito (tal y como me sugirió @Adeptus24 ). Ya os diré.


Acabo de hacer una prueba (porque nunca lo había hecho en este sentido, sino al contrario, los originales en Dropbox y los simbólicos fuera) y parece que si haces un simbólico dentro de Dropbox, cuando haces algún cambio en el archivo original (o abriendo el simbólico, da lo mismo), no se actualiza en Dropbox. Es este el problema que tienes?


Buenas,

esencialmente sí. De hecho, he conseguido hacer cambios y que se actualizara como quería (creo que usando hardlinks), pero cuando lo modifica un compañero se generan copias de conflicto, lo cual como imaginarás da un montón de quebraderos de cabeza.

No me he podido poner aún con lo del script, que parece que será la solución que tendré que tomar.
Yo comparto mi directorio www con otro usuario con mount --bind, no se como se comportaría dropbox con ello, en principio no debería haber problemas.
20 respuestas