rsync e include / excluir. ¿Qué tan difícil puede ser?

Estoy tratando de copyr recursivamente una estructura de directory / file de un directory a otro, manteniendo sólo los files html. Debe ser un caso simple de include / exclude ¿no?

Sólo quiero imprimir los files primero. Cuando lo consiga, lo copyré.

rsync -a --list-only -v SOURCEDIR --exclude='.*' --include='**/*.html' 

Me da todos los files.

 rsync -a --list-only -v SOURCEDIR --include='**/*.html' --exclude='*' 

y

 rsync -a --list-only -v SOURCEDIR --include='*.html' --exclude='*' rsync -a --list-only -v SOURCEDIR --include=*.html --exclude=* 

No me den files.

 rsync -a --list-only -v SOURCEDIR --include='*.html' --exclude='*.*' 

Parece que me da toda la estructura del directory y sólo los files html. Pero no quiero directorys vacíos.

¡Ayuda!

En Mac OS 10.6

¿Ha considerado usar find para hacer su trabajo duro?

Algo en la línea de

 find ./ -name "*.html" -exec rsync -R {} /target/base/directory/ \; 

recreará el tree de directorys de ./ en el que se encuentran los files html y buildá el mismo directory bajo / target / base /

Rsync puede ser confuso acerca de copys selectivas como esta. Utilizo lo siguiente para realizar la tarea que está solicitando:

 rsync -avP \ --filter='+ */' \ --filter='+ **/*.html' \ --filter='- *' \ --prune-empty-dirs \ --delete \ /source/ \ /dest/ 

Básicamente, es necesario include todos los directorys en la búsqueda, luego agregar todos los files *.html a la list, excluir todos los demás files.

La --prune-empty-dirs es útil para usar, ya que excluye cualquier directory que no tenga un file *.html .

No estoy 100% seguro de que esta sea la mejor manera de hacerlo, pero puedes añadir un pequeño ajuste a tu último bash y hacer que funcione. Simplemente agregue la opción de directorys de poda ( --prune or -m ).

 rsync -am --list-only -v SOURCEDIR --include='*.html' --exclude='*.*' 

[0] Por 'mejor', me refiero a la manera más limpia y más eficiente. Parece que debería haber una forma más elegante de express esto, pero no sé de improviso lo que es.