rsync con rutas absolutas y excluyendo subrutas

rsync con rutas absolutas y excluyendo subrutas

Digamos que tengo la siguiente estructura en la rutaorigin_path

origin_path/X=1/A/...
origin_path/X=1/B/...
origin_path/X=1/C/...
...
origin_path/X=2/A/...
origin_path/X=2/B/...
origin_path/X=2/C/...
...
...

Me gustaría replicar la estructura anterior en una ruta diferente llamada destination_path, perosoloincluyendo las rutas correspondientes a los directoriosBarriba.

En otras palabras, me gustaría obtener lo siguiente endestination_path

destination_path/X=1/B/...
destination_path/X=2/B/...
destination_path/X=3/B/...
...

Para aclarar, es posible que parte de esta estructura en la ruta de destino ya exista (por ejemplo, las carpetas destination_path/X=*).

Por lo que tengo entendido, gracias al comentario de @Gilles, rsynclos filtros pueden ser ideales para esto. Sin embargo, nunca los he usado antes y me resulta un poco difícil extrapolar el ejemplo proporcionado enFiltro Rsync: copiar solo un patróna mi situación.

¿En qué orden debo incluir o excluir cosas en mi caso? ¿Y cómo le digo a rsync que use origin_pathy destination_pathcomo rutas globales? (en lugar de hacer que copie cosas con rutas relativas)

Respuesta1

Lo siguiente debería hacer lo que quieras:

rsync --recursive --prune-empty-dirs --include '*/' --include '*/B/**' --exclude '**' origin_path/ destination_path/

La primera regla incluye todos los directorios (de lo contrario, rsync no descenderá a los directorios del nivel superior). La segunda regla incluye todo lo que se encuentra en los subdirectorios "B". La tercera regla excluye todo lo demás. La --prune-empty-dirsopción ignora los directorios vacíos (ya que incluimos todos los directorios con la primera regla).

información relacionada