Tương đương với lệnh tìm Unix trên Windows là gì?
Tôi thấy rằng find.exe
trê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]
Tương đương với lệnh tìm Unix trên Windows là gì?
Tôi thấy rằng find.exe
trê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]
Câu trả lời:
dir <drive: [drive:]> /s | findstr /i <pattern>
- thay thế -
dir /s <drive:>\<pattern>
dir c: d: /s | findstr /i example.txt
- thay thế -
dir /s c:\example.txt
dir c: /s example.txt
hoạt động, quá.
dir /s C:\example.txt
nó là.
\b
cho 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, dir
luôn trả về một danh sách các đường dẫn tuyệt đối, trong khi find
luôn đưa ra các đường dẫn có tiền tố<folder>
Các Find-ChildItem
Cmdlet 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
Find-ChildItem -Type f -Name ".*.exe"
Find-ChildItem -Type f -Name "\.c$" -Exec "Get-Content {} | Measure-Object -Line -Character -Word"
Find-ChildItem -Type f -Empty
Find-ChildItem -Type f -Empty -OutObject
Find-ChildItem -Type f -Empty -Delete
Find-ChildItem -Type f -Size +9M -Delete
Find-ChildItem -Type d
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-ChildItem
cmdlet
Find-ChildItem
khô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
.
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
dir
, ls
hoặc gci
, trừ khi bạn đang viết một tập lệnh.
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 -like
tù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.
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 .