อะไรคือคำสั่งUnix find ที่เทียบเท่าบน Windows?
ผมเห็นว่าfind.exe
บน Windows grep
เป็นเหมือน ฉันสนใจเป็นพิเศษ
find . -name [filename]
อะไรคือคำสั่งUnix find ที่เทียบเท่าบน Windows?
ผมเห็นว่าfind.exe
บน Windows grep
เป็นเหมือน ฉันสนใจเป็นพิเศษ
find . -name [filename]
คำตอบ:
dir <drive: [drive:]> /s | findstr /i <pattern>
- ทางเลือก -
dir /s <drive:>\<pattern>
dir c: d: /s | findstr /i example.txt
- ทางเลือก -
dir /s c:\example.txt
dir c: /s example.txt
ทำงานได้เช่นกัน
dir /s C:\example.txt
มันคือ.
\b
สำหรับช่วงสั้น ๆ (เส้นทางเฉพาะเอาต์พุต) ->find <folder> -name <pattern>
dir /s /b <folder><pattern>
เช่น->find /tmp -name *.txt
dir \s \b C:\temp\*.txt
อย่างไรก็ตามdir
จะส่งคืนรายการพา ธ สัมบูรณ์find
เสมอในขณะที่ให้เส้นทางนำหน้าด้วยเสมอ<folder>
Find-ChildItem
Cmdlet ใน Windows PowerShell เป็นเทียบเท่า Unix / Linux หาคำสั่ง
http://windows-powershell-scripts.blogspot.in/2009/08/unix-linux-find-equivalent-in.html
ตัวเลือก 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
การเปิดเผยข้อมูล: ฉันเป็นผู้พัฒนาของFind-ChildItem
cmdlet
Find-ChildItem
ไม่ใช่ cmdlet อย่างเป็นทางการและไม่รวมอยู่ใน PowerShell คุณจะต้องดาวน์โหลด cmdlet นี้จากผู้ชายบางวันไดรฟ์ ไม่มีความแตกต่างระหว่างสิ่งนั้นและเพียงแค่ดาวน์โหลด bash, cygwin, unixutils หรือโปรแกรมอื่น ๆ ที่ให้คุณเรียกใช้ UNIX find
ได้
หากไม่มีการติดตั้ง cmdlets เพิ่มเติมคุณสามารถใช้Get-ChildItem
:
Get-ChildItem -Filter *.zip -Recurse $pwd
dir
, ls
หรือgci
ถ้าคุณกำลังเขียนสคริปต์
หากคุณใช้การค้นหาของ Unix เพื่อค้นหาไฟล์ในลำดับชั้นของไดเรกทอรีวิธี Powershell คือการใช้Get-ChildItem
(นามแฝงgci
) cmdlet และกรองผลลัพธ์ด้วยWhere-Object
(นามแฝงwhere
) cmdlet
ตัวอย่างเช่นหากต้องการค้นหาไฟล์ทั้งหมด (เริ่มจากC:\Users\
และวนซ้ำ) ด้วยคำว่า 'จำเป็น' ในชื่อให้ใช้คำสั่งต่อไปนี้:
PS> gci -Path "C:\Users\" -Recurse | where {$_.Name -like '*essential*'}
-like
ตัวเลือกที่ช่วยให้คุณสามารถใช้สัญลักษณ์แทนสำหรับการจับคู่รูปแบบ
อันนี้ไม่เจอ GNU แต่ตรงกับคำสั่ง linux ของบรรทัดคำสั่ง linux ภายใต้ PowerShell:
PS> dir -recurse -ea 0 | % FullName | sls <grep_string>
ตัวอย่าง:
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
หมายเหตุ: ทุกอย่างกลับมาหลังจาก "|% FullName" เป็นสตริงแทนที่จะเป็นวัตถุ
คุณยังสามารถใช้ Where Operator, "?" ได้อย่างไรมันทำงานได้มากกว่าและเร็วกว่า:
PS> cd C:\
PS> dir -Recurse -ea 0 | ? FullName -like "*Program*"
| ? FullName -like "*Microsoft*"
| % FullName
| out-gridview
นี่คือทางลัดด่วน:
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 .