Usar 'find -exec' para eliminar directorys funciona incorrectamente con git filter-branch

Estoy eliminando un montón de modules de nodo comprometidos accidentalmente desde un repository git. Para hacer esto, necesito eliminar todos los directorys llamados 'node_modules' de cada commit. No conozco las routes de files de los directorys, así que estoy usando find para ubicarlas y eliminarlas. Este command hace lo que yo quiero HEAD :

 find . -name node_modules -type d -prune -exec rm -rf {} \; 

Sin embargo, cuando bash usarlo con git filter-branch, no solo elimina los directorys 'node_modules', sino que también completa los subtreees de files que los contienen. Es decir, si ejecuto esto:

 git filter-branch --tree-filter 'find . -name node_modules -type d -prune -exec rm -rf {} \;' 

desde el directory base de un repository que se ve así:

 ./node_modules/ ./x/node_modules/ ./y/z/node_modules/ ./a/ 

el resultado será este:

 ./a/ 

aunque quiero que sea esto:

 ./x/ ./y/z/ ./a/ 

¿Es esta una limitación conocida de git filter-branch, o estoy haciendo algo mal?

Nota: Sé que el limpiador de repositorys BFG normalmente sería mejor que git filter-branch para eliminar todos los directorys con el mismo nombre, pero no tengo Java en mi plataforma.

Nota n. ° 2: también sé que podría ser mejor usar git index-filter. No he investigado esto demasiado porque estoy creando un script más grande para pasarlo a git filter-branch, y hay otros commands en el script que solo funcionarán con git tree-filter.