web-dev-qa-db-fra.com

trouver ".ts" mais pas ".d.ts"

Je pensais que cela ferait l'affaire:

find src -type f -regextype egrep -regex '.*(?<!\.d)\.ts'

Mais cela ne semble correspondre à rien.

Je pense que que devrait fonctionner, mais je suppose que cette saveur "egrep" ne supporte pas les références négatives à moins que je n'échappe pas à quelque chose correctement.

Pour référence,

 % find src -type f
src/code-frame.d.ts # <-- I want to filter this out
src/foo.ts
src/index.ts

Existe-t-il un autre moyen rapide de filtrer .d.ts fichiers de mes résultats de recherche?

 % find --version
find (GNU findutils) 4.7.0-git
22
mpen

Je ne crois pas que egrep supporte cette syntaxe (votre expression est une expression régulière compatible Perl). Mais vous n'avez pas besoin d'utiliser d'expressions régulières dans votre exemple, il suffit d'avoir plusieurs -name teste et applique un ! négation selon le cas:

find src -type f -name '*.ts' ! -name '*.d.ts'
71
bxm

Vous pouvez obtenir le résultat souhaité en filtrant uniquement sur les noms de fichiers, annulant le test pour les fichiers dont vous ne voulez pas:

find src -type f -name \*.ts ! -name \*.d.ts
29
Stephen Kitt

Une approche simple (peut-être moins efficace) peut être de filtrer la chaîne de refus.

find -name "*.ts" | egrep -v "\.d\.ts$"
6
alessiosavi