
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 rsync
debería comenzar en inicio, sincronizar la jerarquía de directorios y solo los archivos file1.sh
yfile2.sh
Respuesta1
Sus ejemplos no parecen coincidir con su descripción. Creo que lo que dices que quieres es esto,
- haga coincidir todos los
*.sh
archivos en un subdirectorio desconocido inmediatamente debajo de su/home
- coloque los archivos en el subdirectorio desconocido en el destino
- no incluir
/home
en la ruta de destino
Mirando desde /home
, este comando hará coincidir todos los archivos */*.sh
y los copiará junto con sus rutas parciales al destino. (Elimine --dry-run
si está satisfecho con el resultado deseado).
rsync --dry-run -avR /home/./*/*.sh /target
Por ejemplo, /home/subdir/file.sh
se copiará a/target/subdir/file.sh