Dateinamen mit einem bestimmten Muster in der Windows-Befehlszeile suchen?

10

Es wird versucht, Dateien mit einem bestimmten Muster in einem Verzeichnis und seinen Unterverzeichnissen zu finden. Ich habe es versucht:

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

in der Hoffnung, Dateien wie zu finden

abc.txt.r12222
tjy.java.r9994

Wenn nach dem Buchstaben r eine Nummer angehängt wird, erfolgt dies durch SVN.

Was mache ich falsch?

chz
quelle
3
Willkommen in SU! Wenn Ihnen auf Stackexchange-Websites eine Antwort geholfen hat, können Sie sich bei den Leuten bedanken, indem Sie ihre Antwort positiv bewerten und akzeptieren (indem Sie auf das Häkchen links neben einer Antwort klicken), wenn dies Ihr Problem gelöst hat. Ich sage nur, weil Sie anscheinend keine der Antworten akzeptiert haben, die Sie auf Ihre Fragen erhalten haben.
Terdon

Antworten:

9

Ich habe dies vor ein paar Tagen auf Stack Overflow beantwortet. /programming/15648679/find-text-string-or-part-of-text-with-dot-in-grepwin/15648872#15648872

In Ihrem Fall würde es so aussehen:

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

Aktualisieren

Das * in einem der anderen Beispiele ".r [0-9] * $" findet auch Datensätze, die mit 'r' enden, da der * Quantifizierer 0 oder mehr bedeutet.

Absoluter Nullpunkt
quelle
Hallo cpattersonv1 - danke für die Antwort dir * / s / b | findstr \ .r [0-9] * $ works
chz
findstr scheint das 1 oder viele Symbol '+' nicht zu erkennen
Scott Chu
@ScottChu eine neue Frage mit einem Beispiel beginnen. (Ich habe dies vor 5 Jahren beantwortet.)
AbsoluteƵERØ
0

Mein Vorschlag für Sie ist, dies mit grepeinem Dienstprogramm für UNIX-ähnliche Systeme zu tun, das auf Windows portiert wurde und Zeilen mit regulären Ausdrücken abgleichen kann.

grepist im MSYS-Paket von MinGW enthalten. Das Installationsprogramm finden Sie hier . (nur MSYS installieren)

Dann müssen Sie Ihrer PATH-Variablen MSYS-Tools hinzufügen, dafeult-Verzeichnis für MSYS ist C:\MinGW\msys\1.0\bin

Schließlich können Sie Ihre Suche mit diesem Befehl durchführen:

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

... das bedeutet: „get Ausgang aus ls -a(Dateiliste versteckte Dateien einschließlich) und übergeben es an grep, Anpassungsleitungen , die aussehen wie . .R [0-9] * (mit mindestens einem Zeichen von jedem Stern symbolisiert)“.

gronostaj
quelle
hi gronostaj danke für die antwort; Ich habe versucht$ 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
Hallo, ich kann immer noch nicht den vollständigen Pfadnamen des Dateinamens erhalten. wie mache ich das ? zB c:\pager\test.jar.r46521im Gegensatz zu (Standardeingabe): test.jar.r46521
chz
ls | grep ist dasselbe wie dir | findstr in Windows.
AbsoluteƵERØ
0

Sie können dies versuchen:

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

Um Hilfe zu erhalten, geben Sie ein findstr /?.

Endoro
quelle
Hallo mfm4aa, danke für die Antwort - kann nicht funktionieren; Ich habe alle Kombinationen ausprobiert und keine gibt eine Ameisen-Antwort: ZB inlineC:\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
Bitte versuchen Sie:C:\Temp>dir /aa| findstr .r[0-9]*$
Endoro
Hallo mfm, danke fürs Schreiben - ich kann es immer noch nicht findenC:\Temp>dir /aa | findstr .r[0-9]*$ File Not Found
chz
:) einfach tippen dir /aa| findstr .r[0-9]*$. Das funktioniert hier ...
Endoro
Hallo Endoro, danke für die Antwort. Es hat nicht funktioniert - es heißt Datei nicht gefunden
chz