Windows'ta Unix tipi “locate” mi?


17

Windows CLI (cmd) kullanarak, adının bir kısmını bildiği bir dosya nasıl bulunur? Örneğin, her bir Windows iş istasyonu, javac'ı farklı bir konuma kurar, bunu Windows CLI'den (cmd) nasıl bulur?

Googling Yalnızca Windows Gezgini (dosya yöneticisi) GUI'sini kullandığınızı veya bazı ücretsiz uygulamaları indirdiğimi görüyorum. Windows'un gerçekten yerleşik bir bulma komutu yok mu? Sunucu sürümleri var mı? Ben do not bu tipik benim makineler değildir cygwin veya başka bir şey yüklemek istiyorum.


3
Windows komut satırında yerleşik olan hiçbir şey bulunmaya gerçekten benzemez. Locate32 ( locate32.net ) tavsiye ederim
John T

javacgenellikle aynı yerde olmalı ...
Tamara Wijsman

1
@JohnT bu konum artık çalışmıyor - güncellenmiş locate32 ev locate32.cogit.net
TrojanName

1
Git-Bash.exe aka MINGW locateve updatedb--per stackoverflow.com/questions/36841241/…
MarkHu

Yanıtlar:


22

Yapmanız gerekenleri aşağıdakilerle yapabilmeniz gerekir dir:

dir [filename] /s

[Dosyaadı] yerine aradığınız dosya adını yazın, joker karakter kullanabilmeniz gerekir. / s, alt dizinleri aramasını sağlar, böylece gerekirse C: kökünden başlayabilir ve tüm sürücüyü kontrol etmesini sağlayabilirsiniz.


Tüm sürücüyü ortak bir dosya adı için arıyorsanız, / p'yi eklemeniz de size bir kerede yalnızca bir sonuç sayfası sunması için ödeme yapabilir.
Windows

Teşekkür ederim, bu mükemmel görünüyor. Sık sık en azından C: \ WINDOWS içinde arama gerektiğini biliyorum ki bu arama alır zaman daraltabilir.
dotancohen

1
Bunun javacyüklü olduğunu sanmıyorum C:\WINDOWS...
Tamara Wijsman

Birden çok sürücü / bölümle çalışmaz. Ve 2011'e kadar bile, C'den daha fazlasına sahiptim: Linux'un yerini dosya sistemleri umursamıyor.
Jürgen A. Erhard

1
@ JürgenA.Erhard dürüst olmak gerekirse ... Windows 'u sunduğu gibi' dosya sistemleri'ni gerçekten önemsemiyor (sınırlı anlayışım için.) Bu günlerde birden fazla sürücü arasında arama yapmak istiyorsanız PowerShell benim yolum olurdu Yine de, tüm hacimlerinizi ve silah Get-ChildItem'in hepsini bir araya getirebileceğiniz gibi.
Windows

12

Kimse "nerede" komutundan bahsetmiyor? geçerli ortam PATH içinde yürütülebilir dosyayı arar.

where <executable>

c:\ where
The syntax of this command is:

WHERE [/R dir] [/Q] [/F] [/T] pattern...

Description:
    Displays the location of files that match the search pattern.
    By default, the search is done along the current directory and
    in the paths specified by the PATH environment variable.

4

Windows en açık cevaba sahiptir. Ancak komut satırından hoşlanıyorsanız, powershell'e de bakmak isteyebilirsiniz. Kullanacağınız aynı türden bir arama yapmak için

get-childitem [starting path eg c:\users\] -filter [wildcarded search or filename] -recurse

Hangi kullanışlı bir foreach ifadesine pompalanabilir ve arama sonuçlarına karşı bir süreç çalıştırmak için güzel bir yan yararı vardır.

get-childitem [starting path eg c:\users\] -filter [wildcarded search or filename] -recurse |
    foreach ($_){
          [do something to $_.fullname , like maybe display my image file or relocate it etc..]
    }

3
Bunu yazmak çok uzun sürüyor.
Tamara Wijsman

2
-ChildItem Get olarak kısaltılır edilebilir gciveya ls.
digitxp

Neyse ki, aksine cmd, PowerShellLinux gibi önerileri görmek için "Tab" kullanabilirsiniz. Yani aslında yazmak için çok fazla değil. Ve benim durumumda, lsPowerShell'de çalışmıyor.
WesternGun

3

Windows için bir yerleştirme programı aldım . Sadece beni oku talimatlarını takip etmeniz ve .dll dosyalarını ve .exe dosyasını system32'ye kopyalamanız yeterlidir.

Alternatif, ortam yolunun PATH değişkenine program yolunun eklenmesini içerir.

Fikir bulmak gibi bir şey arıyorsanız Windows üzerinde bulmaktır. :)


Teşekkürler Cheeku, kullanışlı bir uygulama gibi görünüyor. Ancak, tipik olarak sistemlerim olmadığı için sisteme uygulama yükleyemediğimi belirtmiştim .
dotancohen

2
Evet, ama yine de cevap verdim, çünkü benim gibi diğer insanlar faydalı bulabilir ve bu yazı zaten kabul edilmiş bir cevaba sahip olduğundan diğerleri karıştırılmayacak!
Cheeku

1
locateWin7 bilgisayarımda. Veritabanının 3 aydan daha eski olmadığı 435 günlük olduğundan şikayet ediyor. Ve updatedbdahil değildir.
Ocak'ta vinnief

@vinnief Bu, kurulumunuzla ilgili özel bir sorun, sanırım.
Cheeku

1
@Cheeku - Bu John T tarafından işaret aynı app . OP'nin istediği gibi CLI değil, ama harika.
sancho.s Monica'ya

2

Soru biraz belirsiz.

Bir dosyayı bulmak istiyorsunuz (OP'nin gövdesinde belirtiliyor), ancak aynı zamanda bir "locate-type" komutu / uygulaması da (başlıkta belirtiliyor) istiyorsunuz. Büyük sonuçları olan ince bir düşünce var. İki farklı yöntemle bulabilirsiniz:

  1. Hedef ağaç yapısını doğrudan her aramada arama (yavaş).

  2. Önce hedef ağaç yapısının bir veritabanını oluşturma (zaman alıcı olabilir) ve daha sonra veritabanını arayarak bulma (çok hızlı). Aramalarda iyi sonuçlar elde etmek için veritabanı periyodik olarak güncellenmelidir. Bkz. Http://en.wikipedia.org/wiki/Locate_%28Unix%29 .

Unix locate"tip 2" dir, ancak OP'nizin gövdesine göre, iki yöntemden herhangi birinde sorun olmaz. Ayrıca, özellikle CLI seçenekleri hakkında sorular sorarsınız.

Aşağıda bazı seçenekleri listeliyorum ve CLI / GUI olup olmadıklarını belirtiyorum, 1/2 yazıyorum ve bazı yorumlar ekliyorum.

  1. http://locate32.cogit.net/ (zaten John T ve sonra Cheeku tarafından işaret edildi ). GUI, tip 2. Taşınabilir bir sürüm var. Olağanüstü kullanım kolaylığı ve yapılandırılabilirlik. Unix'e çok benzer locate(kullandığım ve çok sevdiğim).
    Not : Unix'in Updatedbbir veritabanını güncellemek için oldukça uzun sürmesine alışkın olmak (elbette taranan ağacın boyutuna bağlıdır), locate32 son derece hızlı buluyorum . Nasıl bu kadar geliştirilebileceğini bilmiyorum.

  2. http://sourceforge.net/projects/winlocate/ CLI, tip 2.

  3. dir [dosyaadı] / s , Windows çözümdür . CLI, tip 1.

  4. gci ... , OldWolf'un çözümü . CLI, tip 1.

  5. http://gnuwin32.sourceforge.net/packages/findutils.htm CLI, tip 2.

  6. Her şey GUI, yazın?


1
Teşekkür ederim, bu iyi bir açıklama ve seçeneklerin güzel bir özeti.
dotancohen



2

Bu uzun zaman önce cevaplandı biliyorum, ancak bu benim unix / linux kullanılan bulma işlevini simüle etmek için benim komut dosyası

Bu locate.bat kaydedin ve System32 VEYA saklandığı dizinden çalıştırın. Bu gibi bir parametre alır "cmd> locate javac.exe"

Locate / c anahtarı (2. parametre olarak örnek sayısını sayar) ve /? yardım metnini görüntüler

@echo off 
if [%1]==[] goto :usage
if [%1] == [/?] (
:usage
echo Usage: 
echo locate "filename" { optional } /c { shows counter }
echo note:  results are exported to C:\temp\result.txt
goto :EOF
) else (
     setlocal EnableDelayedExpansion
     dir /a /b /s C:\ | findstr /I "%1" > C:\temp\result.txt 
     type C:\temp\result.txt | more /S
     set counter=0
     if [%2] == [/c] (
         for /F %%i in ('type C:\temp\result.txt') do (
             set /a counter=!counter!+1
         )
         echo Total Matches: !counter!
      ) 
)
endlocal > nul  
goto :EOF

EDIT: (Güncellenmiş Komut Dosyası, daha organize ve sadece bir dosya adı değil, herhangi bir arama terimine izin vermek gibi daha çeşitli durumlarla başa çıkabilir)

@echo off
::initialize local varaibles to default values
setlocal

set file=
set directory=
set toppath=top

::some switch validation ( from command line )
if [%1]==[] goto :Usage
if [%1]==[/?] goto :Usage
if [%1]==[/help] goto :Usage

::handle switches with if structures
if [%2]==[/c] (
     set count=yes
) ELSE (
     if [%2]==[/t] ( if [%3]==[] (goto :Usage) else (set toppath=%3))   
     if [%4]==[/c] (
          set count=yes
     ) ELSE (
          set count=
     )
)
set file=%1

::Directory Validation ( Goto jumps possible, along with raptors ) 
if [%toppath%] == [] ( 
    IF NOT EXIST %toppath% goto :FolderInvalid 
) else (
    if [%toppath%] neq [top] set directory=%toppath%
)
set toppath=
setlocal EnableDelayedExpansion

::Run Bulk of the Script
dir /a /b /s %directory% | findstr /I "%file%" > C:\temp\result.txt 
type C:\temp\result.txt | more /S
     set counter=0
     if [%count%]==[yes] (
         for /F %%i in ('type C:\temp\result.txt') do (
             set /a counter=!counter!+1
     )
     echo Total Matches: !counter!
) 

goto :End

:Usage
echo locate ^[file^] {term^/file to look for} ^| ^[^/t^] {dir^/subdirs to search} ^| ^[^/c^] {show counter}
echo.
echo notes to user:  1. Results are exported to C:\temp\result.txt
echo                 2. Default search dir is the current unless specified by ^/t switch
echo                 3. For best results write switches in order given ! ( or beware of raptors )
goto :End

:FolderInvalid
echo Folder Invalid

:End
endlocal > nul

1

Gelecekteki alan için Windows tarihçileri: Her Şey Arama ile kutsanmış olduk . Resim dmenu + find + mlocate, w / cli seçenekleriyle sıkı, oldukça küçük bir Windows hizmetine toplandı. Bunun dışında dizin gerçek zamanlı olarak güncellenir . Linux'ta hiçbir şey yaklaşmıyor. Bu "lanet çekirdeğin biraz daha Microsofty olmasını dilerdim" diyeceksiniz birkaç kez olacak


Güzel yarar. Gönderdiğiniz için teşekkürler.
Rudiger Wolf

1

Kısa cevap, Windows'ta tam bir eşdeğer olmamasıdır . Çözüm dir komutunu kullanmaktır . Bu, özel karakterleri destekleyen bir dizin listesi komutudur ve kabul edilen yanıtta belirtildiği gibi kullanılabilir.

Bulun sistemleri gibi birçok Unix üzerinde komut bir dizin tabanlı aramasıdır. Dosya sistemlerini indeksleyen Updatedb komutuyla birlikte çalışır . İndeks tabanlı bir arama olduğundan, özellikle derin dizin hiyerarşilerini ararken, Unix'te dir ve find gibi metin tabanlı arama komutlarından çok daha hızlıdır .


wheretam eşdeğerdir.
Alex78191

-3

Windows'ta bunu yapmak için herhangi bir CLI yönteminin farkında değilim. Windows CLI'nın yaygın kullanıcılar tarafından terk edildiğini, bu nedenle genellikle daha az olgunlaşmış bir araç seti sunduğunu unutmayın. En iyi seçeneğiniz findWindows'ta Gnu'yu kullanarak GnuWin32'den alabilirsiniz . Bir komut dosyası geliştiriyorsanız, yalnızca komut dosyasını eklemeniz gerekir find.exe(endişelenmeyin, çok büyük değil).

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.