Tương đương với lệnh tìm Unix trên Windows


34

Tương đương với lệnh tìm Unix trên Windows là gì?

Tôi thấy rằng find.exetrên Windows giống như một grep. Tôi đặc biệt quan tâm đến tương đương với

find . -name [filename]

2
Có điều gì đó sai với câu trả lời của tôi? Tôi có thể cải thiện nó không? Bạn vẫn cần giúp đỡ chứ?
JulianM

Xin lỗi, tôi đã mất tầm nhìn của chủ đề này một thời gian trước đây. Cảm ơn câu trả lời của bạn và lời xin lỗi vì đã không chấp nhận nó sớm hơn.
ARV

Câu trả lời:


21
dir <drive: [drive:]> /s | findstr /i <pattern>

- thay thế -

dir /s <drive:>\<pattern>

thí dụ

dir c: d: /s | findstr /i example.txt

- thay thế -

dir /s c:\example.txt

dir c: /s example.txthoạt động, quá.
DevSolar

@DevSolar bạn có thể kiểm tra lại lệnh của bạn không? Tôi đã thử nghiệm nó trên Windows 5.1 Build 2600 SP3 và lệnh của bạn chỉ cho tôi danh sách các tệp trong thư mục c:
JohannesM

1
À ... xin lỗi. Phục vụ tôi ngay để gõ từ bộ nhớ. dir /s C:\example.txtnó là.
DevSolar

1
cho các kết quả tương tự nhất tôi sử dụng \bcho ngắn gọn (chỉ đường dẫn đầu ra); find <folder> -name <pattern>-> dir /s /b <folder><pattern>. Ví dụ: find /tmp -name *.txt> dir \s \b C:\temp\*.txt. Tuy nhiên, dirluôn trả về một danh sách các đường dẫn tuyệt đối, trong khi findluôn đưa ra các đường dẫn có tiền tố<folder>
Hashbrown

28

Các Find-ChildItemCmdlet trong Windows Powershell là một tương đương của Unix / Linux tìm lệnh

http://windows-powershell-scripts.blogspot.in/2009/08/unix-linux-find-equivalent-in.html

Một số tùy chọn Find-ChildItem

  1. Find-ChildItem -Type f -Name ".*.exe"
  2. Find-ChildItem -Type f -Name "\.c$" -Exec "Get-Content {} | Measure-Object -Line -Character -Word"
  3. Find-ChildItem -Type f -Empty
  4. Find-ChildItem -Type f -Empty -OutObject
  5. Find-ChildItem -Type f -Empty -Delete
  6. Find-ChildItem -Type f -Size +9M -Delete
  7. Find-ChildItem -Type d
  8. Find-ChildItem -Type f -Size +50m -WTime +5 -MaxDepth 1 -Delete

Tiết lộ: Tôi là nhà phát triển của Find-ChildItemcmdlet


2
Cảm ơn bạn. Điều này chắc chắn là nhiều hơn trong những gì tôi đang tìm kiếm để trả lời câu hỏi này.
supercheetah 2/2/2015

7
Find-ChildItemkhông phải là một lệnh ghép chính thức và nó không được bao gồm trong PowerShell; bạn phải tải xuống lệnh ghép ngắn này từ OneDrive của một số người . Không có sự khác biệt giữa điều đó và chỉ cần tải xuống bash, cygwin, unixutils hoặc bất kỳ chương trình nào khác cho phép bạn chạy UNIX find.
walen

19

Không có lệnh ghép ngắn nào được cài đặt, bạn chỉ cần sử dụng Get-ChildItem:

Get-ChildItem -Filter *.zip -Recurse $pwd

1
Trong trường hợp bạn có thể muốn sử dụng một trong những bí danh ngắn dir, lshoặc gci, trừ khi bạn đang viết một tập lệnh.
Swonkie

5

Nếu bạn đang sử dụng công cụ tìm kiếm của Unix để tìm kiếm các tệp trong hệ thống phân cấp thư mục, thì cách Powershell là sử dụng lệnh ghép ngắn Get-ChildItem(bí danh là gci) và lọc kết quả với lệnh ghép ngắn Where-Object(bí danh là where).

Ví dụ: để tìm tất cả các tệp (bắt đầu từ C:\Users\và đệ quy) với từ 'thiết yếu' trong tên của nó, hãy sử dụng như sau:

PS> gci -Path "C:\Users\"  -Recurse | where {$_.Name -like '*essential*'}

Các -liketùy chọn cho phép bạn sử dụng ký tự đại diện cho phù hợp với mô hình.


2

Cái này không chính xác là GNU tìm thấy, nhưng phù hợp hơn với triết lý dòng lệnh linux dưới powershell:

PS> dir -recurse -ea 0 | % FullName | sls <grep_string>

Thí dụ:

PS> cd C:\
PS> dir -recurse -ea 0 | % FullName | sls "Program" | sls "Microsoft"
PS> dir -recurse -ea 0 | % FullName | sls "Program" | sls "Microsoft" | out-gridview

Lưu ý: Mọi thứ được trả về sau "|% FullName" là một chuỗi, thay vì một đối tượng.

Bạn cũng có thể sử dụng Toán tử ở đâu, "?", Tuy nhiên, công việc của nó nhiều hơn và không nhanh hơn nhiều:

PS> cd C:\
PS> dir -Recurse -ea 0 | ? FullName -like "*Program*" 
                       | ? FullName -like "*Microsoft*" 
                       | % FullName 
                       | out-gridview

Đây là một phím tắt nhanh:

PS> function myfind {dir -recurse -ea 0 | % FullName | sls $args }

PS> cd C:\
PS> myfind "Programs" | sls "Microsoft"

#find all text files recursively from current directory
PS> myfind "\.txt$"

#find all files recursively from current directory
PS> myfind .

Tìm -exec grep {} từ UnixUtils không hoạt động chính xác có vẻ như "không có tệp hoặc thư mục như vậy". Giải pháp này: PowerShell.exe -Command "dir -Recurse -ea 0 |? FullName-like '* .log' | sls error", từ trong một tập lệnh bó hoạt động. Lưu ý: phải sử dụng dấu ngoặc đơn bên trong, dấu ngoặc kép bên ngoài.
kevinf
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.