Trouver des noms de fichiers avec un certain modèle sur la ligne de commande Windows?


10

Essayer de trouver des fichiers d'un certain modèle dans un répertoire et ses sous-répertoires. J'ai essayé:

C:\test\workspace>dir *.*.r[0-9]* /s /b
File Not Found

dans l'espoir de trouver des fichiers comme

abc.txt.r12222
tjy.java.r9994

Où un nombre est ajouté après la lettre r, fait par SVN.

Qu'est-ce que je fais mal?


3
Bienvenue chez SU! Sur les sites stackexchange, lorsqu'une réponse vous a aidé, le moyen de remercier les gens est de voter pour leur réponse et de l'accepter (en cliquant sur la coche à gauche d'une réponse) si elle a résolu votre problème. Je dis seulement parce que vous semblez n'avoir accepté aucune des réponses que vous avez reçues pour vos questions.
terdon

Réponses:


9

Je viens de répondre à cela sur Stack Overflow il y a quelques jours. /programming/15648679/find-text-string-or-part-of-text-with-dot-in-grepwin/15648872#15648872

Dans votre cas, cela ressemblerait à:

dir * /s/b | findstr \.r[0-9]+$

Mise à jour

Le * dans l'un des autres exemples ".r [0-9] * $" trouve également les enregistrements qui se terminent par "r" puisque le * quantificateur signifie 0 ou plus.


Salut cpattersonv1 - merci d'avoir répondu dir * / s / b | findstr \ .r [0-9] * $ works
chz

findstr semble ne pas reconnaître le symbole 1 ou plusieurs '+'
Scott Chu

@ScottChu commence une nouvelle question avec un exemple. (J'ai répondu il y a 5 ans.)
AbsoluteƵERØ

0

Ma suggestion pour vous est de le faire avec grep- un utilitaire pour les systèmes de type UNIX qui a été porté sur Windows et qui peut faire correspondre les lignes à l'aide d'expressions régulières.

grepest inclus avec le package MSYS de MinGW, le programme d'installation peut être trouvé ici . (installez uniquement MSYS)

Ensuite, vous devrez ajouter des outils MSYS à votre variable PATH, le répertoire dafeult pour MSYS est C:\MinGW\msys\1.0\bin

Enfin, vous pouvez faire votre serach avec cette commande:

ls -a | grep ^.+\..+\.r[0-9]+$

... ce qui signifie: "obtenez la sortie de ls -a(liste des fichiers, y compris les fichiers cachés) et passez-la à grep, faites correspondre les lignes qui ressemblent à . .r [0-9] * (avec au moins un caractère symbolisé par chaque astérisque)".


salut gronostaj merci pour la réponse; J'ai essayé$ ls -R | grep -H ^.*[0-9]$ (standard input):res.jar.r469621 (standard input):res.jar.r464460 (standard input):test.jar.r46521 (standard input):test.jar.r46970
chz

Salut, je ne peux toujours pas obtenir le nom de chemin complet du nom de fichier; comment je fais ça ? par exemple c:\pager\test.jar.r46521par opposition à (entrée standard): test.jar.r46521
chz

ls | grep est le même que dir | findstr dans Windows.
AbsoluteƵERØ

0

Vous pouvez essayer ceci:

dir /a| findstr .r[0-9]*$

Pour obtenir de l'aide, tapez findstr /?.


Salut mfm4aa merci d'avoir répondu - ne semble pas fonctionner; J'ai essayé toutes les combinaisons et aucune ne donne la réponse de la liste des fourmis: par exemple en ligneC:\Temp>findstr /S /B [0-9] . C:\Temp>findstr /S /B r[0-9]$ . C:\Temp>findstr /S /B $.*r[0-9]$ C:\Temp>findstr /S /B $.*r*$ C:\Temp>findstr /S /B $.*r..*$ C:\Temp>findstr /S /B $.*r\..*$ C:\Temp>findstr /S /B /R $.*r\..*$ C:\Temp>findstr /S /B /R "$.*\..r[0-9]*$ C:\Temp>findstr /S /B /R "$.*\..r[0-9]*$" C:\Temp>findstr /S /B /R "$.*\..r[0-9]*$" . C:\Temp>findstr /S /B /R "$.*\..r[0-9]$" . C:\Temp>findstr /S /B /R "$.*[0-9]*" . C:\Temp>findstr /S /B /R "$*[0-9]*" .
chz

Veuillez essayer:C:\Temp>dir /aa| findstr .r[0-9]*$
Endoro

Salut mfm merci pour l'écriture - je ne trouve toujours pasC:\Temp>dir /aa | findstr .r[0-9]*$ File Not Found
chz

:) tapez simplement dir /aa| findstr .r[0-9]*$. Cela fonctionne ici ...
Endoro

Salut Endoro merci d'avoir répondu. Cela n'a pas fonctionné - il dit File Not Found
chz
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.