¿Unix tipo "localizar" en Windows?


17

Usando la CLI de Windows (cmd), ¿cómo ubica uno un archivo del que conoce parte del nombre? Por ejemplo, cada estación de trabajo de Windows instala javac en una ubicación diferente, ¿cómo se puede encontrar desde la CLI de Windows (cmd)?

Googleo solo menciono el uso de la GUI del Explorador de Windows (administrador de archivos) o la descarga de alguna aplicación gratuita. ¿Windows realmente no tiene un comando de localización integrado? ¿Las ediciones del servidor lo tienen? Yo no quiero instalar cygwin o cualquier otra cosa, éstos normalmente no son mis máquinas.


3
Nada incorporado en la línea de comandos de Windows es realmente similar a localizar. Recomendaría localizar32 ( localizar32.net )
John T

javacpor lo general debería estar en el mismo lugar ...
Tamara Wijsman

1
@JohnT esa ubicación ya no funciona: la ubicación actualizada de Locate32 es localizar32.cogit.net
TrojanName

1
Pruebe el Git-Bash.exe, también conocido como MINGW, que incluye locatey updatedb--per stackoverflow.com/questions/36841241/…
MarkHu

Respuestas:


22

Debería poder hacer lo que necesita hacer con dir:

dir [filename] /s

Reemplace [nombre de archivo] con el nombre de archivo que está buscando, debería poder usar comodines. / s hace que busque subdirectorios, por lo que si lo necesita, puede comenzar en la raíz de C: y hacer que compruebe toda la unidad.


Si está buscando en la unidad completa un nombre de archivo común, también puede pagar incluir / p para que solo le presente una página de resultados a la vez.
Windos

Gracias, esto se ve perfecto. A menudo sé al menos que necesito buscar en C: \ WINDOWS para que esto pueda reducir el tiempo que lleva la búsqueda.
dotancohen

1
No creo que javacesté instalado para C:\WINDOWS...
Tamara Wijsman

No funciona con múltiples unidades / particiones. E incluso en 2011, tenía más que solo C: Linux 'localizar no se preocupa por los sistemas de archivos.
Jürgen A. Erhard

1
@ JürgenA.Erhard para ser justos ... Linux en sí mismo realmente no se preocupa por los 'sistemas de archivos' como Windows los presenta (a mi entender limitado). En estos días, si quisiera buscar en más de una unidad, PowerShell sería mi opción. sin embargo, ya que sería capaz de agrupar todos sus volúmenes y disparar Get-ChildItem en todos ellos.
Windos

12

¿Nadie habla sobre el comando "dónde"? busca el archivo ejecutable en la RUTA del entorno actual.

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 tiene la respuesta más directa. Pero si eres aficionado a la línea de comandos, es posible que también quieras ver PowerShell. Para lograr el mismo tipo de búsqueda que usarías

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

Lo que tiene el beneficio adicional de poder ser bombeado a una práctica declaración foreach y ejecutar un proceso contra los resultados de búsqueda.

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
Esto se siente demasiado largo para escribir.
Tamara Wijsman

2
Get-ChildItem se puede abreviar como gcio ls.
digitxp

Afortunadamente, a diferencia de en cmd, PowerShellpuedes usar "Tab" para ver sugerencias, como en Linux. Por lo tanto, no son tantos para escribir en realidad. Y, en mi caso, lsen PowerShell no funciona.
WesternGun

3

Simplemente obtuve un programa de localización para Windows . Solo necesita seguir las instrucciones de leerme y copiar los archivos .dll y .exe a system32.

La alternativa incluye agregar la ruta del programa a la variable de entorno PATH.

La idea es localizar en Windows si está buscando algo "como" localizar. :)


Gracias Cheeku, parece una aplicación práctica. Sin embargo, mencioné que no puedo instalar aplicaciones en el sistema, ya que normalmente no son mis sistemas.
dotancohen

2
Sí, pero respondí de todos modos porque otras personas como yo pueden encontrarlo útil y otros no se confundirán ya que esta publicación ya tiene una respuesta aceptada.
Cheeku

1
locateestá en mi computadora Win7. Se queja de que la base de datos tiene 435 días de antigüedad, cuando la instalación no tiene más de 3 meses. Y updatedbno está incluido.
vinnief

@vinnief Supongo que es un problema particular con su instalación.
Cheeku

1
@Cheeku - Esta es la misma aplicación apuntada por John T . No es CLI como lo solicitó el OP, pero es increíble.
sancho.s Restablece a Monica el

2

La pregunta es algo ambigua.

Desea ubicar un archivo (indicado en el cuerpo del OP), pero también desea un comando / aplicación "localizar-tipo" (indicado en el título). Hay una consideración sutil con enormes implicaciones. Puede ubicar con dos métodos diferentes:

  1. Buscando la estructura de árbol de destino directamente en cada búsqueda (lenta).

  2. Primero creando una base de datos de la estructura de árbol de destino (puede llevar mucho tiempo), y luego localizando buscando en la base de datos (muy rápido). La base de datos debe actualizarse periódicamente para obtener buenos resultados en las búsquedas. Ver http://en.wikipedia.org/wiki/Locate_%28Unix%29 .

Unix locate es de "tipo 2", pero según el cuerpo de su OP, estaría bien con cualquiera de los dos métodos. Además, pregunta específicamente sobre las opciones de CLI.

Enumero a continuación algunas opciones, y especifico si son CLI / GUI, escribo 1/2, y agrego algunos comentarios.

  1. http://locate32.cogit.net/ (ya señalado por John T y luego por Cheeku ). GUI, tipo 2. Hay una versión portátil. Excelente facilidad de uso y configurabilidad. Muy similar a Unix locate(que usé y me gustó mucho).
    Nota : Al estar acostumbrado a que Unix Updatedbtarde bastante en actualizar una base de datos (por supuesto, depende del tamaño del árbol escaneado), me parece locate32 extremadamente rápido. No sé cómo se puede mejorar tanto.

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

  3. dir [nombre de archivo] / s , la solución de Windos . CLI, tipo 1.

  4. gci ... , la solución de OldWolf . CLI, tipo 1.

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

  6. Todo GUI, tipo?


1
Gracias, esta es una buena explicación y un buen resumen de opciones.
dotancohen



2

Sé que esta fue respondida hace mucho tiempo, sin embargo, este es mi script para simular la función de localización utilizada en Unix / Linux

Guarde esto como localizar.bat y colóquelo en System32 O ejecute desde el directorio en el que está almacenado. Toma un parámetro como este "cmd> localizar javac.exe"

El interruptor de localizar / c (como un segundo parámetro contará el número de instancias) y localizar /? mostrará el texto de ayuda

@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

EDITAR: (Script actualizado, más organizado y puede manejar una variedad más amplia de situaciones, como permitir cualquier término de búsqueda, no solo un nombre de archivo)

@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

Para futuros historiadores del espacio de Windows: hemos sido bendecidos con Everything Search . Picture dmenu + find + mlocate se convirtió en un pequeño y apretado servicio de Windows con opciones de cli. Excepto que esto actualiza su índice en tiempo real . Nada en Linux se acerca. Será una de las pocas veces que dirás "caramba, desearía que este maldito núcleo fuera un poco más Microsofty".


Buena utilidad Gracias por publicar.
Rudiger Wolf el

1

La respuesta corta es que no hay un equivalente exacto en Windows . La solución es usar el directorio comando . Este es un comando de lista de directorio que admite caracteres especiales y se puede usar como se indica en la respuesta aceptada.

El comando Localizar en muchos sistemas similares a Unix es una búsqueda basada en índices. Funciona en conjunto con el comando Actualizadob que indexa los sistemas de archivos. Dado que es una búsqueda basada en índices, generalmente es mucho más rápido que los comandos de búsqueda basados ​​en texto, como dir y find en Unix, especialmente cuando se buscan jerarquías de directorios profundas.


whereEs el equivalente exacto.
Alex78191

-3

No conozco ningún método de CLI para hacer esto en Windows. Tenga en cuenta que la CLI de Windows ha sido abandonada por usuarios comunes, por lo que ofrece un conjunto de herramientas generalmente menos maduro. Su mejor opción podría ser usar el gnu finden Windows, que puede obtener de GnuWin32 . Si está desarrollando un script, solo tendría que incluir find.exey sus dependencias con el script (no se preocupe, no es muy grande).

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.