विंडोज पर यूनिक्स-प्रकार "खोजें"?


17

Windows CLI (cmd) का उपयोग करते हुए, कोई व्यक्ति उस फ़ाइल का पता कैसे लगा सकता है जिसे वह जानता है? उदाहरण के लिए, हर एक विंडोज वर्कस्टेशन एक अलग स्थान पर javac स्थापित करता है, कोई इसे Windows CLI (cmd) से कैसे खोजेगा?

Googling मुझे केवल Windows Explorer (फ़ाइल प्रबंधक) GUI का उपयोग करने या कुछ फ्रीवेयर एप्लिकेशन डाउनलोड करने का उल्लेख है। क्या विंडोज में वास्तव में निर्मित कमांड नहीं है? क्या सर्वर संस्करण है? मैं साइबरविन या कुछ और स्थापित नहीं करना चाहता, ये आमतौर पर मेरी मशीनें नहीं हैं।


3
विंडोज कमांड-लाइन में निर्मित कुछ भी वास्तव में पता लगाने के समान नहीं है। मैं 1932 में find32 ( find32.net )
जॉन टी

javacआमतौर पर एक ही जगह पर होना चाहिए ...
तमारा विजसमैन

1
@JohnT कि स्थान नहीं रह गया काम करता है - अद्यतन locate32 घर है locate32.cogit.net
TrojanName

1
Git-Bash.exe उर्फ ​​MINGW को शामिल करें locateऔर जिसमें updatedb--per stackoverflow.com/questions/36841241/…
MarkHu

जवाबों:


22

आपको वह करने में सक्षम होना चाहिए जो आपको करना चाहिए dir:

dir [filename] /s

[फ़ाइल नाम] को उस फ़ाइल नाम से बदलें, जिसे आप खोज रहे हैं, आपको वाइल्डकार्ड का उपयोग करने में सक्षम होना चाहिए। / s इसे उप-निर्देशिका खोजता है, इसलिए यदि आपको आवश्यकता है तो आप C की जड़ में शुरू कर सकते हैं: और यह पूरी ड्राइव की जांच कर सकता है।


यदि आप एक सामान्य फ़ाइल नाम के लिए संपूर्ण ड्राइव खोज रहे हैं, तो यह भी शामिल हो सकता है कि इसमें p / p शामिल हो, जो आपको केवल एक समय में परिणामों के पृष्ठ के साथ प्रस्तुत करता है।
विंडोस

धन्यवाद, यह सही लग रहा है। मैं अक्सर कम से कम यह जानता हूं कि मुझे C: \ WINDOWS में खोज करने की आवश्यकता है ताकि खोज को लगने वाले समय को कम किया जा सके।
dotancohen

1
मुझे नहीं लगता कि javacयह स्थापित है C:\WINDOWS...
तमारा विजसमैन

कई ड्राइव / विभाजन के साथ काम नहीं करता है। और यहां तक ​​कि 2011 में, मेरे पास सिर्फ C से अधिक था: लिनक्स का पता लगाने के लिए फाइल सिस्टम की परवाह नहीं है।
जुरगेन ए। इरहार्ड

1
@ JürgenA.Erhard निष्पक्ष होना ... लिनक्स स्वयं 'फाइल सिस्टम' के बारे में वास्तव में परवाह नहीं करता है क्योंकि विंडोज उन्हें (मेरी सीमित समझ के लिए) प्रस्तुत करता है। इन दिनों यदि आप एक से अधिक ड्राइव पर खोज करना चाहते थे तो PowerShell मेरा जाना होगा। यद्यपि, जैसा कि आप अपने सभी संस्करणों और बंदूक Get-ChildItem उन सभी पर एक साथ समूह बनाने में सक्षम होंगे।
विंडोस

12

कोई भी "कहाँ" कमांड के बारे में बात नहीं करता है? यह मौजूदा वातावरण के पथ में निष्पादन योग्य फ़ाइल खोजता है।

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

विंडोस का सबसे सीधा जवाब है। लेकिन अगर आप कमांड लाइन के शौकीन हैं, तो आप शक्तियां भी देखना चाहते हैं। उसी प्रकार की खोज को पूरा करने के लिए जिसका आप उपयोग करेंगे

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

जिसके पास एक अच्छा फ़ार्च स्टेटमेंट में पंप करने और खोज परिणामों के विरुद्ध एक प्रक्रिया चलाने में सक्षम होने का अच्छा पक्ष लाभ है।

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
यह टाइप करने में बहुत लंबा लगता है।
तमारा विज्समैन

2
Get-ChildItem के रूप में संक्षिप्त किया जा सकता है gciया ls
डिजिटएक्सपी

सौभाग्य से, इसके विपरीत cmd, PowerShellआप लिनक्स में जैसे सुझावों को देखने के लिए "टैब" का उपयोग कर सकते हैं। तो यह वास्तव में टाइप करने के लिए इतने सारे नहीं हैं। और, मेरे मामले में, lsPowerShell में काम नहीं कर रहा है।
पश्चिमीगंज

3

मुझे बस विंडोज के लिए एक खोज कार्यक्रम मिला । आपको बस पढ़ने के निर्देशों का पालन करने की जरूरत है और .dll फ़ाइलों और .exe को system32 में कॉपी करें।

वैकल्पिक में पर्यावरण चर पथ के लिए प्रोग्राम पथ जोड़ना शामिल है।

विचार यह है कि यदि आप किसी चीज़ की तलाश कर रहे हैं तो विंडोज पर उसका पता लगाएं। :)


धन्यवाद चीकू, जो एक आसान अनुप्रयोग की तरह दिखता है। हालाँकि मैंने उल्लेख किया था कि मैं सिस्टम पर एप्लिकेशन इंस्टॉल नहीं कर सकता क्योंकि वे आमतौर पर मेरे सिस्टम नहीं हैं।
dotancohen

2
हां, लेकिन मैंने उत्तर दिया कि वैसे भी मेरे जैसे अन्य लोग इसे उपयोगी पा सकते हैं और अन्य लोग भ्रमित नहीं होंगे क्योंकि इस पोस्ट में पहले से ही एक स्वीकृत उत्तर है!
चीकू

1
locateमेरे Win7 कंप्यूटर पर है। यह डेटाबेस के 435 दिन पुराने होने की शिकायत करता है, जब इंटैलेशन 3 महीने से अधिक पुराना नहीं होता है। और updatedbशामिल नहीं है।
vinnief

@vinnief यह आपकी स्थापना के साथ एक विशेष समस्या है, मुझे लगता है।
चीकू

1
@ चीकू - यह जॉन टी द्वारा बताया गया एक ही ऐप है । यह सीएलआई नहीं है जैसा कि ओपी ने पूछा, लेकिन यह भयानक है।
sancho.s

2

सवाल कुछ अस्पष्ट है।

आप एक फ़ाइल का पता लगाना चाहते हैं (ओपी के निकाय में कहा गया है), लेकिन आप "पता-प्रकार" कमांड / ऐप (शीर्षक में कहा गया है) भी चाहते हैं। विशाल निहितार्थ के साथ एक सूक्ष्म विचार है। आप दो अलग-अलग तरीकों से पता लगा सकते हैं:

  1. प्रत्येक खोज (धीरे) में सीधे लक्ष्य वृक्ष संरचना की खोज करना।

  2. पहले लक्ष्य ट्री संरचना का डेटाबेस बनाना (समय लेने वाला हो सकता है), और फिर डेटाबेस खोज कर (बहुत तेज) पता लगाना। खोजों में अच्छे परिणाम प्राप्त करने के लिए डेटाबेस को समय-समय पर अद्यतन किया जाना चाहिए। Http://en.wikipedia.org/wiki/Locate_%28Unix%29 देखें ।

यूनिक्स locate"टाइप 2" का है, लेकिन आपके ओपी के शरीर के अनुसार, आप दोनों में से किसी भी तरीके से ठीक होंगे। इसके अलावा, आप विशेष रूप से सीएलआई विकल्पों के बारे में पूछते हैं।

मैं कुछ विकल्पों के नीचे सूची देता हूं, और मैं निर्दिष्ट करता हूं कि क्या वे सीएलआई / जीयूआई हैं, टाइप 1/2, और मैं कुछ टिप्पणियां जोड़ता हूं।

  1. http://locate32.cogit.net/ (पहले से ही जॉन टी द्वारा और फिर चीकू द्वारा इंगित किया गया )। GUI, टाइप 2. एक पोर्टेबल संस्करण है। उपयोग की सरलता, और विन्यासशीलता। यूनिक्स के समान locate(जो मैंने बहुत इस्तेमाल किया और पसंद किया)।
    नोट : Updatedbएक डेटाबेस को अपडेट करने के लिए यूनिक्स के काफी लंबे समय तक उपयोग किए जाने के कारण (निश्चित रूप से, यह स्कैन किए गए पेड़ के आकार पर निर्भर करता है), मुझे locate32 बहुत तेज लगता है । मुझे नहीं पता कि इसमें इतना सुधार कैसे हो सकता है।

  2. http://sourceforge.net/projects/winlocate/ CLI, टाइप 2।

  3. डीआईआर [फ़ाइलनाम] / एस , विंडोस द्वारा समाधान । सीएलआई, टाइप 1।

  4. Gci ... , OldWolf द्वारा समाधान । सीएलआई, टाइप 1।

  5. http://gnuwin32.sourceforge.net/packages/findutils.htm CLI, टाइप 2।

  6. सब कुछ जीयूआई, टाइप करें।


1
धन्यवाद, यह एक अच्छी व्याख्या और विकल्पों का एक अच्छा सारांश है।
डिटानचेन

2

मैंने खोज और अद्यतन के लिए एक PowerShell पोर्ट बनाया। SQLite को बैकएंड के रूप में उपयोग करता है, और इसमें एक ऑटो इंस्टॉलर है। केवल

.\Invoke-Locate.ps1 -install. 

लोकेट्स लगभग 300ms / क्वेरी लेते हैं।

फिर

locate whatever

और आप सेट हैं।

यहाँ छवि विवरण दर्ज करें

https://gallery.technet.microsoft.com/scriptcenter/Invoke-Locate-PowerShell-0aa2673a


2

हाथ से स्थापित करने की आवश्यकता नहीं है। Http://chatalogy.org देखें

choco install winlocate

शेल वातावरण को पुनरारंभ करें

Updatedb.bat -a
Locate.bat somefile

1
विनोलेट चॉकलेट पर (अब) नहीं है।
लेनार्ट

2

मुझे पता है कि यह एक लंबे समय से पहले उत्तर दिया गया था, हालांकि यह मेरी स्क्रिप्ट है जो यूनिक्स / लिनक्स में उपयोग किए गए डिटेक्ट फ़ंक्शन को अनुकरण करने के लिए है

System32 में इसे save.bat और जगह के रूप में सहेजें या इसमें संग्रहीत निर्देशिका से चलाएं। इस "cmd> find javac.exe" जैसा एक पैरामीटर लेता है

पता / सी स्विच (एक 2 पैरामीटर के रूप में उदाहरणों की संख्या की गणना करेगा) और पता लगाएं /? सहायता पाठ प्रदर्शित करेगा

@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

संपादित करें: (अद्यतित स्क्रिप्ट, अधिक व्यवस्थित और कई प्रकार की स्थितियों को संभाल सकता है, जैसे कि किसी भी खोज शब्द की अनुमति न केवल फ़ाइल नाम)

@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

भविष्य के स्थान के लिए विंडोज इतिहासकार: हम सब कुछ खोज के साथ धन्य हो गए हैं । चित्र dmenu + find + mlocate एक तंग, बहुत कम विंडोज सेवा w / cli विकल्पों में लुढ़का। इस चीज़ को छोड़कर वास्तविक समय में इसके सूचकांक को अपडेट करता है । लिनक्स पर कुछ भी नहीं आता है। यह कुछ समयों में से एक होगा जिसे आप कहेंगे "जी मैं चाहता हूँ कि यह कर्नेल थोड़ा और अधिक Microsofty था"


अच्छी उपयोगिता है। पोस्ट करने का शुक्रिया।
रुडिगर वुल्फ

1

संक्षिप्त उत्तर यह है कि विंडोज पर कोई सटीक समकक्ष नहीं है । वर्कअराउंड dir कमांड का उपयोग करना है । यह एक निर्देशिका सूची कमांड है जो विशेष वर्णों का समर्थन करती है, और स्वीकृत उत्तर में बताए अनुसार उपयोग की जा सकती है।

पता लगाएँ प्रणालियों जैसे कई यूनिक्स पर कमांड एक सूचकांक आधारित खोज है। यह फाइल सिस्टम को इंडेक्स करने वाले लोडेड कमांड के साथ मिलकर काम करता है । चूंकि यह एक सूचकांक आधारित खोज है, इसलिए यह आमतौर पर पाठ आधारित खोज आदेशों जैसे कि डीआईआर और यूनिक्स पर ढूंढने की तुलना में बहुत तेज है , खासकर जब गहरी निर्देशिका पदानुक्रम की खोज करते हैं।


whereबिलकुल बराबर है।
एलेक्स78191

-3

मुझे विंडोज में ऐसा करने के लिए किसी भी CLI विधि की जानकारी नहीं है। ध्यान रखें कि विंडोज सीएलआई को आम उपयोगकर्ताओं द्वारा छोड़ दिया गया है, इसलिए यह आम तौर पर कम परिपक्व उपकरण सेट करता है। आपकी सर्वश्रेष्ठ शर्त findविंडोज़ में ग्नू का उपयोग करना हो सकती है , जिसे आप ग्नूविन 32 से प्राप्त कर सकते हैं । यदि आप एक स्क्रिप्ट विकसित कर रहे हैं, तो आपको बस find.exeस्क्रिप्ट के साथ उसकी निर्भरता को शामिल करना होगा (चिंता न करें, यह बहुत बड़ा नहीं है)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.