"Individuare" di tipo Unix su Windows?


17

Utilizzando l'interfaccia della riga di comando di Windows (cmd), come si individua un file di cui conosce parte del nome? Ad esempio, ogni singola workstation Windows installa javac in una posizione diversa, come si trova dalla CLI di Windows (cmd)?

Googling Vedo solo menzione dell'utilizzo della GUI di Windows Explorer (file manager) o del download di alcune applicazioni freeware. Windows non ha davvero un comando di individuazione incorporato? Le edizioni del server ce l'hanno? Io non voglio installare cygwin o qualsiasi altra cosa, questi non sono in genere le mie macchine.


3
Nulla di integrato nella riga di comando di Windows è davvero simile a individuare. Consiglierei Locate32 ( Locate32.net )
John T

javacdi solito dovrebbe essere nello stesso posto ...
Tamara Wijsman,

1
@JohnT quella posizione non funziona più - la home Locate32 aggiornata è Locate32.cogit.net
TrojanName

1
Prova il Git-bash.exe aka MINGW che comprende locatee updatedb--per stackoverflow.com/questions/36841241/...
MarkHu

Risposte:


22

Dovresti essere in grado di fare ciò che devi fare con dir:

dir [filename] /s

Sostituisci [nome file] con il nome file che stai cercando, dovresti essere in grado di utilizzare i caratteri jolly. / s lo fa cercare nelle sottodirectory, quindi se necessario puoi avviarlo nella radice di C: e far controllare l'intero disco.


Se stai cercando sull'intera unità un nome di file comune, può anche pagare includere / p in quanto ti presenta solo una pagina di risultati alla volta.
Windos,

Grazie, sembra perfetto. Spesso so almeno che devo cercare in C: \ WINDOWS in modo che ciò possa restringere il tempo impiegato dalla ricerca.
dotancohen,

1
Non penso che javacsia installato su C:\WINDOWS...
Tamara Wijsman il

Non funziona con più unità / partizioni. E anche nel 2011, non avevo solo C: Linux a individuare non importa dei filesystem.
Jürgen A. Erhard,

1
@ JürgenA.Erhard ad essere onesti ... Linux stesso non si preoccupa davvero dei "file system" come li presenta Windows (per mia comprensione limitata). In questi giorni se volessi cercare su più di un'unità PowerShell sarebbe la mia scelta a, dato che saresti in grado di raggruppare tutti i tuoi volumi e sparare a Get-ChildItem su tutti.
Windos,

12

Nessuno parla del comando "where"? cerca il file eseguibile nel PERCORSO dell'ambiente corrente.

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

Windos ha la risposta più semplice. Ma se ti piace la riga di comando, potresti voler guardare anche PowerShell. Per realizzare lo stesso tipo di ricerca che useresti

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

Il che ha il piacevole vantaggio di essere pompato in una pratica dichiarazione foreach ed eseguire un processo in base ai risultati della ricerca.

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
Sembra troppo lungo da scrivere.
Tamara Wijsman,

2
Get-ChildItem può essere abbreviato come gcio ls.
digitxp

Fortunatamente, a differenza di in cmd, PowerShellpuoi usare "Tab" per vedere suggerimenti, come in Linux. Quindi non sono così tanti da scrivere in realtà. E, nel mio caso, lsin PowerShell non funziona.
WesternGun

3

Ho semplicemente ottenuto un programma di individuazione per Windows . Devi solo seguire le istruzioni per leggermi e copiare i file .dll e .exe in system32.

L'alternativa include l'aggiunta del percorso del programma alla variabile d'ambiente PATH.

L'idea è di individuare su Windows se stai cercando qualcosa di simile a "individuare". :)


Grazie Cheeku, sembra un'applicazione utile. Tuttavia, ho detto che non posso installare applicazioni sul sistema in quanto in genere non sono i miei sistemi.
dotancohen il

2
Sì, ma ho risposto comunque perché altre persone come me possono trovarlo utile e gli altri non saranno confusi poiché questo post ha già una risposta accettata!
Cheeku,

1
locateè sul mio computer Win7. Si lamenta del fatto che il database abbia 435 giorni, quando l'installazione non ha più di 3 mesi. E updatedbnon è incluso
vinnief

@vinnief Questo è un problema particolare con la tua installazione, presumo.
Cheeku,

1
@Cheeku - Si tratta della stessa applicazione puntato da John T . Non è CLI come richiesto dall'OP, ma è fantastico.
sancho.s Ripristina Monica il

2

La domanda è alquanto ambigua.

Si desidera individuare un file (indicato nel corpo dell'OP), ma si desidera anche un comando / app "di tipo localizzato" (indicato nel titolo). C'è una sottile considerazione con enormi implicazioni. È possibile individuare con due diversi metodi:

  1. Ricerca della struttura dell'albero di destinazione direttamente in ogni ricerca (lenta).

  2. In primo luogo la creazione di un database della struttura ad albero di destinazione (può richiedere molto tempo), quindi l'individuazione mediante la ricerca nel database (molto veloce). Il database deve essere aggiornato periodicamente per ottenere buoni risultati nelle ricerche. Vedi http://en.wikipedia.org/wiki/Locate_%28Unix%29 .

Unix locateè di "tipo 2", ma secondo il corpo del tuo OP, saresti d'accordo con uno dei due metodi. Inoltre, chiedi specificamente sulle opzioni della CLI.

Elencherò di seguito alcune opzioni e specificherò se sono CLI / GUI, digitare 1/2 e aggiungo alcuni commenti.

  1. http://locate32.cogit.net/ (già indicato da John T e poi da Cheeku ). GUI, tipo 2. Esiste una versione portatile. Eccezionale facilità d'uso e configurabilità. Molto simile a Unix locate(che ho usato e mi è piaciuto molto).
    Nota : essendo abituato a Unix a impiegare Updatedbabbastanza tempo per aggiornare un database (ovviamente dipende dalle dimensioni dell'albero scansionato), trovo locate32 estremamente veloce. Non so come possa essere così migliorato.

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

  3. dir [nome file] / s , la soluzione di Windos . CLI, digitare 1.

  4. gci ... , la soluzione di OldWolf . CLI, digitare 1.

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

  6. Tutto GUI, digitare?


1
Grazie, questa è una buona spiegazione e un bel riassunto delle opzioni.
dotancohen,



2

So che a questo è stato risposto molto tempo fa, tuttavia questo è il mio script per simulare la funzione di individuazione utilizzata in unix / linux

Salvalo come Locate.bat e posizionalo in System32 O esegui dalla directory in cui è memorizzato. Accetta un parametro come questo "cmd> individuare javac.exe"

L'opzione Locate / c (come secondo parametro conterà il numero di istanze) e individuare /? visualizzerà il testo di aiuto

@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: (Script aggiornato, più organizzato e in grado di gestire una più ampia varietà di situazioni, come consentire qualsiasi termine di ricerca non solo un nome file)

@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

Per i futuri storici di Windows nello spazio: siamo stati benedetti con Ricerca di tutto . Picture dmenu + find + mlocate arrotolato in un servizio Windows stretto e grazioso con opzioni cli /. Tranne che questa cosa aggiorna il suo indice in tempo reale . Niente su Linux si avvicina. Sarà una delle poche volte in cui dirai "Accidenti, vorrei che questo dannato kernel fosse un po 'più Microsofty"


Bella utilità. Grazie per la pubblicazione.
Rudiger Wolf,

1

La risposta breve è che non esiste un equivalente esatto su Windows . La soluzione alternativa è utilizzare la dir comando . Questo è un comando di elenco di directory che supporta caratteri speciali e può essere utilizzato come indicato nella risposta accettata.

Il comando Locate su molti sistemi simili a Unix è una ricerca basata su indice. Funziona insieme al comando Updatedb che indicizza i file system. Dal momento che si tratta di una ricerca basata su indice, di solito è molto più veloce dei comandi di ricerca basati su testo come dir e find su Unix, specialmente durante la ricerca di gerarchie di directory profonde.


whereè equivalente equivalente.
Alex78191,

-3

Non sono a conoscenza di alcun metodo CLI per farlo in Windows. Tieni presente che l'interfaccia della riga di comando di Windows è stata abbandonata dagli utenti comuni, quindi offre un set di strumenti generalmente meno maturo. La tua scommessa migliore potrebbe essere usare lo gnu findin Windows, che puoi ottenere da GnuWin32 . Se stai sviluppando uno script, dovresti solo includere find.exee le sue dipendenze con lo script (non preoccuparti, non è molto grande).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.