Supongo que mantener una copia de todos los archivos en su computadora portátil no es una opción. De lo contrario, sería mucho más fácil.
La herramienta correcta aquí es una herramienta de control de versiones. Pero me doy cuenta de que a menos que todos los usuarios tengan una cantidad mínima de sofisticación técnica, hacer que usen herramientas de control de versiones no es una sugerencia realista. E incluso entonces, tendría que elegir cuidadosamente lo que verifica en su computadora portátil.
Usted todavía puede usar el control de versiones. En la máquina compartida, verifique todos sus archivos y deje en paz los archivos de otras personas. Mantenga un pago por separado en su computadora portátil. Comprometerse y verificar cada vez que cambie de máquina. Cuanto más lo pienso, más me gusta esta opción: no requiere ninguna codificación ni siquiera ningún script frágil.
Haces sincronización bidireccional. Rsync no es bueno para esto: si olvida ejecutarlo o lo ejecuta accidentalmente en la dirección incorrecta, es probable que pierda el trabajo sin previo aviso. Unison es una buena herramienta para la sincronización bidireccional: siempre se sincroniza bidireccionalmente y se queja si un archivo ha cambiado en ambos lados. Es de código abierto y está bien integrado en las plataformas de Unix y Windows.
Desafortunadamente, unison no tiene una opción para ignorar archivos por propietario, como tampoco lo hace rsync. Puede generar una lista de ignorados con find -user
, pero se vuelve desordenada y existe una condición de carrera si alguien más agrega o elimina archivos entre la ejecución de find
y la ejecución de unison
o rsync
.
Puede parchear rsync o unison para agregar la opción de ignorar archivos en función de sus metadatos. Acabo de echar un vistazo rápido a la fuente, y en ambos casos el código de exclusión está fuertemente vinculado a las cadenas, no a las entradas del directorio. Parece factible, pero no es un parche trivial.
Puede crear una vista del sistema de archivos que contenga solo sus archivos. No tengo una solución completa y perfecta, pero aquí hay un par de ideas para comenzar.
Si la máquina compartida admite enlaces duros (todos los unices lo hacen, y Windows lo hace desde NT4 siempre que use NTFS), es bastante fácil crear una copia del repositorio que contenga solo enlaces duros de sus archivos:
cd /shared/repository
find . -user "$USER" -exec sh -c 'mkdir -p "/my/view/${0%/*}" &&
ln "$0" "/my/view/$0"' {} \;
o con zsh:
autoload zmv
zmv -L -Q '/shared/repository/(**/)(*)(u$UID)' "/my/view/$1$2"
Debería tener cuidado de no romper los enlaces duros al editar o sincronizar. No sé cómo rsync y al unísono podrían hacer frente. Después de la creación inicial, se eliminará un archivo en el repositorio compartido que sea de su propiedad y que tenga un recuento de enlaces de 1, y un archivo en su vista con un recuento de enlaces de 1 se vinculará en el repositorio compartido. Todo esto es bastante torpe, y agradecería cualquier sugerencia de mejora.
Si la máquina compartida admite FUSE , puede usarla para crear una vista en vivo del repositorio compartido que contiene solo sus archivos. No conozco ningún sistema de archivos FUSE existente que pueda hacerlo, pero bindfs se acerca (no he mirado el código para evaluar la dificultad de codificación).
Puede usar LD_PRELOAD
para anular readdir
(o un equivalente de Windows) cuando ejecuta rsync o unison, para que solo devuelva archivos de su propiedad.