Temukan nama file dengan pola tertentu di baris perintah Windows?

10

Mencoba menemukan file dengan pola tertentu dalam direktori dan subdirektori. Saya mencoba:

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

dengan harapan menemukan file seperti

abc.txt.r12222
tjy.java.r9994

Di mana nomor ditambahkan setelah huruf r, dilakukan oleh SVN.

Apa yang saya lakukan salah?

chz
sumber
3
Selamat datang di SU! Di situs stackexchange, ketika sebuah jawaban telah membantu Anda, cara untuk berterima kasih kepada orang adalah dengan meningkatkan jawaban mereka dan menerimanya (dengan mengklik tanda centang di sebelah kiri jawaban) jika itu memecahkan masalah Anda. Saya hanya mengatakan karena Anda sepertinya tidak menerima jawaban yang Anda terima untuk pertanyaan Anda.
terdon

Jawaban:

9

Saya baru saja menjawab ini di Stack Overflow beberapa hari yang lalu. /programming/15648679/find-text-string-or-part-of-text-with-dot-in-grepwin/15648872#15648872

Dalam kasus Anda akan terlihat seperti:

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

Memperbarui

* Dalam salah satu contoh lain ".r [0-9] * $" juga menemukan catatan yang berakhiran 'r' karena * kuantifier berarti 0 atau lebih.

AbsoluteƵERØ
sumber
Hai cpattersonv1 - terima kasih telah merespons dir * / s / b | findstr \ .r [0-9] * $ works
chz
findstr tampaknya tidak mengenali simbol 1 atau banyak '+'
Scott Chu
@ScottChu memulai pertanyaan baru dengan sebuah contoh. (Saya menjawab ini 5 tahun yang lalu.)
AbsoluteƵERØ
0

Saran saya untuk Anda adalah melakukannya dengan grep- utilitas untuk sistem mirip UNIX yang telah porting ke Windows dan dapat mencocokkan garis menggunakan ekspresi reguler.

grepsudah termasuk dalam paket MSYS MinGW, penginstal dapat ditemukan di sini . (hanya instal MSYS)

Maka Anda harus menambahkan alat MSYS ke variabel PATH Anda, direktori dafeult untuk MSYS C:\MinGW\msys\1.0\bin

Akhirnya Anda dapat melakukan serach Anda dengan perintah ini:

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

... yang berarti: "mendapatkan output dari ls -a(file daftar termasuk file tersembunyi) dan menyebarkannya ke grep, garis pertandingan yang terlihat seperti . .R [0-9] * (dengan setidaknya satu karakter dilambangkan oleh masing-masing tanda bintang)".

gronostaj
sumber
hai gronostaj terima kasih atas tanggapannya; Saya mencoba$ 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
Hai, saya masih belum bisa mendapatkan nama path lengkap dari nama file; bagaimana aku melakukan itu ? misalnya c:\pager\test.jar.r46521sebagai kebalikan dari (input standar): test.jar.r46521
chz
ls | grep sama dengan dir | findstr di Windows.
AbsoluteƵERØ
0

Anda dapat mencoba ini:

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

Untuk bantuan, ketik findstr /?.

Endoro
sumber
Hai mfm4aa terima kasih telah merespons - sepertinya tidak berfungsi; Saya sudah mencoba semua kombinasi dan tidak ada yang memberikan jawaban semut yang terdaftar: Misalnya 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
Silakan coba:C:\Temp>dir /aa| findstr .r[0-9]*$
Endoro
Hai mfm terima kasih untuk menulis - saya masih tidak dapat menemukanC:\Temp>dir /aa | findstr .r[0-9]*$ File Not Found
chz
:) cukup ketik dir /aa| findstr .r[0-9]*$. Itu bekerja di sini ...
Endoro
Hai Endoro, terima kasih atas tanggapannya. Tidak berfungsi - katanya File Tidak Ditemukan
chz