Windows'taki Unix eşdeğeri komutunun karşılığı


34

Windows'taki Unix find komutunun karşılığı nedir ?

find.exeWindows'ta daha çok bir şey olduğunu görüyorum grep. Ben özellikle eşdeğeri ile ilgileniyorum

find . -name [filename]

2
Cevabımda bir sorun mu var? İyileştirebilir miyim? Hala yardıma ihtiyacın var mı?
JohannesM

Üzgünüm, bir süre önce bu konuyu görmemiştim. Cevabınız için teşekkürler ve daha önce kabul etmediğiniz için özür dileriz.
ARV

Yanıtlar:


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

- alternatif -

dir /s <drive:>\<pattern>

örnek

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

- alternatif -

dir /s c:\example.txt

dir c: /s example.txtde çalışır.
DevSolar

@DevSolar komutunuzu tekrar kontrol edebilir misiniz? Windows 5.1 Build 2600 SP3'te test ettim ve komutunuz bana sadece c:
JohannesM

1
Uh ... özür dilerim. Bellekten yazmama hakkımı veriyor. dir /s C:\example.txtbu.
DevSolar

1
\bkısaca kullandığım en benzer sonuçlar için (yalnızca çıkış yolları); find <folder> -name <pattern>-> dir /s /b <folder><pattern>. Örneğin find /tmp -name *.txt-> dir \s \b C:\temp\*.txt. Ancak dirher zaman mutlak yolların bir listesini döndürür, oysa findher zaman önceden eklenmiş yolları verir<folder>
Hashbrown

28

Find-ChildItem, Windows PowerShell Cmdlet Unix / Linux find komutunun bir eşdeğerdir

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

Find-ChildItem Seçeneklerinden Bazıları

  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

Açıklama: Ben Find-ChildItemcmdlet geliştiricisiyim


2
Teşekkür ederim. Bu, kesinlikle bu soruyu cevaplarken aradığım şeyi akılda tutuyor.
supercheetah

7
Find-ChildItemresmi bir cmdlet değildir ve PowerShell'e dahil değildir; Bu cmdlet'i bir adamın OneDrive'ından indirmelisin . Bunun arasında sadece bash, cygwin, unixutils veya UNIX'leri çalıştırmanıza izin veren başka bir program indirmek arasında hiçbir fark yoktur find.
Walen

19

Yüklü ek cmdlet'ler olmadığında, aşağıdakileri kullanabilirsiniz Get-ChildItem:

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

1
Bu durumda muhtemelen kısa takma ad birini kullanmak istediğinizde dir, lsya gcisenaryo yazmaya sürece.
Swonkie,

5

Eğer bir dizin hiyerarşisinde dosyaları aramak için Unix'in find kullanılarak, o zaman Powershell yolu kullanmaktır Get-ChildItem(diğer adıdır gci) cmdlet'in ile sonuçları filtrelemek Where-Object(takma adıdır where) cmdlet'indeki.

Örneğin, C:\Users\adında 'temel' kelimesini içeren tüm dosyaları (en baştan ve tekrarlı olarak) bulmak için aşağıdakileri kullanın:

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

Bu -likeseçenek, desen eşleştirmesi için joker karakter kullanmanıza izin verir.


2

Bu tam bir GNU bulgusu değil, powershell altındaki linux komut satırı felsefesiyle daha yakından eşleşiyor:

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

Örnek:

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

Not: "|% FullName" den sonra döndürülen her şey bir nesne yerine bir dizedir.

Bununla birlikte, Nerede Operatörü "?" Kullanabilirsiniz, ancak bu daha çok çalışır ve çok daha hızlı değildir:

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

İşte hızlı bir kısayol:

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 .

Bulun -exec grep {} UnixUtils düzgün çalışmıyor, "böyle bir dosya veya dizin yok" görünüyor. Bu çözüm: PowerShell.exe -Command "dir -Recurse -ea 0 |? FullName-like '* .log' | sls error", bir toplu komut dosyasından çalışır. Not: İçinde tek tırnaklar, dışta çift tırnaklar kullanmalısınız.
kevinf
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.