¿Cómo se ignoran todos los archivos pero no los subdirectorios con Unison?

¿Cómo se ignoran todos los archivos pero no los subdirectorios con Unison?

Quiero sincronizar el contenido de todos los subdirectorios de una raíz determinada, pero solo unos pocos archivos en la raíz misma. Para hacerlo, me gustaría ignorar todos los archivos que usan la ignoredirectiva (manteniendo todos los subdirectorios) y volver a agregar los pocos archivos que quiero conservar con la ignorenotdirectiva. Para hacerlo probé las dos cosas siguientes:

  1. Agregar una expresión regular para excluir cualquier entrada en la raíz que contenga una barra al agregarla ignore = Regex ^(?!.*\/).*$a mi perfil. Pero esto da como resultado un mensaje de error como el siguiente sin más explicación:

    Malformed pattern "Regex ^(?!.*\/).*$"." 
    
  2. Primero ignorando todo ignore = Name ?*y luego volviendo a agregar cada ruta que contenga una barra diagonal con ignorenot = Path */*, lo cual no funcionó como se esperaba ya que no ignorar directorios no funciona de esta manera.

Parece ser un problema muy simple, pero no puedo entenderlo.

Respuesta1

Parece que no es posible hacer exactamente lo que quieres. Cuando Unison sincroniza un archivo con un directorio, Unison puede notar la diferencia entre los dos, pero Unison no se refiere a ellos de manera diferente (por ejemplo, anteponiendo a a /los directorios o algo así) de una manera que permita al usuario comparar patrones con uno. o el otro. Por ejemplo, si sincroniza un directorio con el nombre deery un archivo con el nombre philen la raíz ROOT, Unison los verá con el nombre

new dir  ---->      ROOT/deer
new file ---->      ROOT/phil

No se puede distinguir entre ROOT/deery ROOT/phil. Aquí hay algunas sugerencias

  1. Especifique manualmente los directorios que desea sincronizar agregando una línea path = deera su perfil para cada directorio. De todos modos, creo que esta es la forma estándar de configurar Unison. Luego, para cualquier archivo en su directorio raíz que desee sincronizar también, digamos un archivo llamado phil, puede pasar phila un directorio que se sincronice deer/synced-root-files/y luego agregar unenlace simbólicodesde ese archivo de regreso a su directorio raíz

    cd ROOT; ln -s ROOT/deer/synced-root-files/phil
    
  2. Invente una convención de nomenclatura en su directorio raíz con la que pueda comparar patrones. Por ejemplo, nombre todos y sólo los archivos quenodesea sincronizar algo como ignore.phily agregar una línea a su perfil de Unison ignore = Path ignore.*.

Aquí hay un enlace alEspecificación de rutayIgnorando caminossecciones del manual de Unison para que los futuros lectores puedan encontrarlo fácilmente.

información relacionada