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.