
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, rsync
los 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_path
y destination_path
como 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-dirs
opción ignora los directorios vacíos (ya que incluimos todos los directorios con la primera regla).