Expresión regular negativa lookahead

En mi directorio de inicio tengo una carpeta drupal-6.14 que contiene la plataforma Drupal.

Desde este directorio utilizo el siguiente comando:

find drupal-6.14 -type f -iname '*' | grep -P 'drupal-6.14/(?!sites(?!/all|/default)).*' | xargs tar -czf drupal-6.14.tar.gz

Lo que este comando hace es gzips la carpetadrupal-6.14, excluyendo todas las subcarpetas dedrupal-6.14 / sites / excepto sitios / todos y sitios / por defecto, que incluye.

Mi pregunta está en la expresión regular:

grep -P 'drupal-6.14/(?!sites(?!/all|/default)).*'

La expresiontrabajos para excluir todas las carpetas que quiero excluir, pero no entiendo muy bien por qué.

Es una tarea común usar expresiones regulares para

Unir todas las cadenas, excepto las queno hacer contienen subpattern x. O en otras palabras, negando un subpatrón.

Yo (creo) que comprendo que la estrategia general para resolver estos problemas es el uso de lookaheads negativos, pero nunca he comprendido a un nivel satisfactorio cómo funcionan las miradas positivas (negativas).

Con los años, he leído muchos sitios web en ellos. Los manuales de expresiones regulares de PHP y Python, otras páginas comohttp://www.regular-expressions.info/lookaround.html Y así sucesivamente, pero nunca heDe Verdad Tenía una sólida comprensión de ellos.

¿Podría alguien explicar cómo funciona esto y quizás proporcionar algunos ejemplos similares que harían cosas similares?

- Actualización uno:

Respecto a la respuesta de Andomar: ¿se puede expresar de manera más sucinta una doble mirada negativa como una sola declaración positiva de cabeza delante?

es decir:

'drupal-6.14/(?!sites(?!/all|/default)).*'

equivalente a:

'drupal-6.14/(?=sites(?:/all|/default)).*'

???

- Actualización dos:

Según @andomar y @alan moore, no puede intercambiar lookahead doble negativo por lookahead positivo.

Respuestas a la pregunta(3)

Su respuesta a la pregunta