rsync solo tipos de archivos particulares en subdirectorios con una profundidad máxima fija

rsync solo tipos de archivos particulares en subdirectorios con una profundidad máxima fija

Quiero sincronizar todos los archivos *.sh en exactamente un subdirectorio. Probé este cmd pero todos los archivos en un directorio están sincronizados en lugar de solo tipos de archivos particulares.

rsync -vr -n --include="*.sh" --exclude="*/*/" --prune-empty-dirs /source /target

También intenté agregar un filtro como

--filter="+ *.sh"

pero esto no cambió el resultado. Otro filtro

rsync -vr -n --include="*.sh" --filter="-! *.sh" --exclude="*/*/" --prune-empty-dirs

me da una lista vacía. Si excluyo "*" también excluyo "*.sh"... ¿Qué pasa? ¡Gracias!

La profundidad debe ser uno: se desconoce el nombre del subdirectorio. Por ejemplo,

home/subdirectory1/subsubdirectory/subsubsubdirectory/file.sh
home/subdirectory1/file1.sh
home/subdirectory2/file2.sh
home/subdirectory3/file

En el ejemplo anterior rsyncdebería comenzar en inicio, sincronizar la jerarquía de directorios y solo los archivos file1.shyfile2.sh

Respuesta1

Sus ejemplos no parecen coincidir con su descripción. Creo que lo que dices que quieres es esto,

  • haga coincidir todos los *.sharchivos en un subdirectorio desconocido inmediatamente debajo de su/home
  • coloque los archivos en el subdirectorio desconocido en el destino
  • no incluir /homeen la ruta de destino

Mirando desde /home, este comando hará coincidir todos los archivos */*.shy los copiará junto con sus rutas parciales al destino. (Elimine --dry-runsi está satisfecho con el resultado deseado).

rsync --dry-run -avR /home/./*/*.sh /target

Por ejemplo, /home/subdir/file.shse copiará a/target/subdir/file.sh

información relacionada