เทียบเท่าคำสั่ง Unix find บน Windows


34

อะไรคือคำสั่งUnix find ที่เทียบเท่าบน Windows?

ผมเห็นว่าfind.exeบน Windows grepเป็นเหมือน ฉันสนใจเป็นพิเศษ

find . -name [filename]

2
มีบางอย่างผิดปกติกับคำตอบของฉันหรือไม่ ฉันสามารถปรับปรุงได้หรือไม่ คุณยังต้องการความช่วยเหลือหรือไม่?
JohannesM

ขออภัยฉันไม่เห็นหัวข้อนี้มานานแล้ว ขอขอบคุณสำหรับคำตอบและขออภัยที่ไม่ตอบรับเร็วกว่านี้
ARV

คำตอบ:


21
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ทำงานได้เช่นกัน
DevSolar

@DevSolar คุณสามารถตรวจสอบคำสั่งของคุณอีกครั้งได้หรือไม่ ผมได้ทดสอบมันบน Windows 5.1 Build 2600 SP3 และคำสั่งของคุณเพียงแค่ให้ฉันรายชื่อของไฟล์ในไดเรกทอรี C:
JohannesM

1
เอ่อ ... ขอโทษ ให้บริการฉันถูกต้องเพื่อพิมพ์จากหน่วยความจำ dir /s C:\example.txtมันคือ.
DevSolar

1
สำหรับผลลัพธ์ที่คล้ายกันมากที่สุดที่ฉันใช้\bสำหรับช่วงสั้น ๆ (เส้นทางเฉพาะเอาต์พุต) ->find <folder> -name <pattern> dir /s /b <folder><pattern>เช่น->find /tmp -name *.txt dir \s \b C:\temp\*.txtอย่างไรก็ตามdirจะส่งคืนรายการพา ธ สัมบูรณ์findเสมอในขณะที่ให้เส้นทางนำหน้าด้วยเสมอ<folder>
Hashbrown

28

Find-ChildItemCmdlet ใน Windows PowerShell เป็นเทียบเท่า Unix / Linux หาคำสั่ง

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

ตัวเลือก 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

การเปิดเผยข้อมูล: ฉันเป็นผู้พัฒนาของFind-ChildItemcmdlet


2
ขอขอบคุณ. นี่เป็นสิ่งที่อยู่ในใจของสิ่งที่ฉันต้องการในการตอบคำถามนี้มากขึ้น
supercheetah

7
Find-ChildItemไม่ใช่ cmdlet อย่างเป็นทางการและไม่รวมอยู่ใน PowerShell คุณจะต้องดาวน์โหลด cmdlet นี้จากผู้ชายบางวันไดรฟ์ ไม่มีความแตกต่างระหว่างสิ่งนั้นและเพียงแค่ดาวน์โหลด bash, cygwin, unixutils หรือโปรแกรมอื่น ๆ ที่ให้คุณเรียกใช้ UNIX findได้
walen

19

หากไม่มีการติดตั้ง cmdlets เพิ่มเติมคุณสามารถใช้Get-ChildItem:

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

1
ซึ่งในกรณีนี้คุณอาจต้องการที่จะใช้อย่างใดอย่างหนึ่งของนามแฝงสั้นdir, lsหรือgciถ้าคุณกำลังเขียนสคริปต์
Swonkie

5

หากคุณใช้การค้นหาของ Unix เพื่อค้นหาไฟล์ในลำดับชั้นของไดเรกทอรีวิธี Powershell คือการใช้Get-ChildItem(นามแฝงgci) cmdlet และกรองผลลัพธ์ด้วยWhere-Object(นามแฝงwhere) cmdlet

ตัวอย่างเช่นหากต้องการค้นหาไฟล์ทั้งหมด (เริ่มจากC:\Users\และวนซ้ำ) ด้วยคำว่า 'จำเป็น' ในชื่อให้ใช้คำสั่งต่อไปนี้:

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

-likeตัวเลือกที่ช่วยให้คุณสามารถใช้สัญลักษณ์แทนสำหรับการจับคู่รูปแบบ


2

อันนี้ไม่เจอ 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 .

ค้นหา -exec grep {} จาก UnixUtils ทำงานไม่ถูกต้องดูเหมือนว่า "ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว" วิธีการแก้ปัญหานี้: PowerShell.exe -Command "dir -Recurse -ea 0 |? FullName-like '* .log' | ข้อผิดพลาด sls" จากภายในสคริปต์ชุดทำงาน หมายเหตุ: ต้องใช้อัญประกาศเดี่ยวภายในอัญประกาศคู่นอก
kevinf
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.