Unix-tipo "localizar" no Windows?


17

Usando a CLI do Windows (cmd), como se localiza um arquivo que ele conhece parte do nome? Por exemplo, cada estação de trabalho Windows instala o javac em um local diferente. Como encontrá-lo na CLI do Windows (cmd)?

Pesquisando apenas menciono o uso da GUI do Windows Explorer (gerenciador de arquivos) ou o download de algum aplicativo freeware. O Windows realmente não possui um comando de localização incorporado? As edições do servidor possuem? Eu não quero instalar cygwin ou qualquer outra coisa, estes não são normalmente minhas máquinas.


3
Nada embutido na linha de comando do Windows é realmente semelhante à localização. Eu recomendaria Locate32 ( locate32.net )
John T

javacgeralmente deve ser no mesmo lugar ...
Tamara Wijsman

1
@JohnT esse local não funciona mais - a página inicial atualizada localize é o local32.cogit.net
TrojanName 8/08

1
Experimente o Git-Bash.exe, também conhecido como MINGW, que inclui locatee updatedb--per stackoverflow.com/questions/36841241/…
MarkHu 04/04/19

Respostas:


23

Você deve conseguir fazer o que precisa dir:

dir [filename] /s

Substitua [filename] pelo nome do arquivo que você está procurando; você poderá usar caracteres curinga. / s faz com que ele pesquise subdiretórios; portanto, se você precisar, pode começar na raiz do C: e verificar a unidade inteira.


Se você estiver pesquisando a unidade inteira em busca de um nome de arquivo comum, também poderá ser pago para incluir / p, para que apenas apresente uma página de resultados por vez.
Windos

Obrigado, isso parece perfeito. Muitas vezes sei pelo menos que preciso pesquisar em C: \ WINDOWS, para que isso possa diminuir o tempo que a pesquisa leva.
dotancohen

1
Eu não acho que javacé instalado para C:\WINDOWS...
Tamara Wijsman

Não funciona com várias unidades / partições. E mesmo em 2011, eu tinha mais do que apenas a localização do C: Linux 'não se preocupa com sistemas de arquivos.
Jürgen A. Erhard

1
@ JürgenA.Erhard para ser justo ... O Linux em si realmente não se importa com 'sistemas de arquivos', pois o Windows os apresenta (para meu entendimento limitado). Hoje em dia, se você quiser pesquisar em mais de uma unidade, o PowerShell será a minha escolha. no entanto, como você poderá agrupar todos os seus volumes e colocar Get-ChildItem em todos eles.
Windos

11

Ninguém fala sobre o comando "onde"? ele procura o arquivo executável no CAMINHO do ambiente atual.

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 tem a resposta mais direta. Mas se você gosta da linha de comando, também pode usar o PowerShell. Para realizar o mesmo tipo de pesquisa que você usaria

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

O que tem o benefício legal de poder ser bombeado para uma declaração prática de foreach e executar um processo nos resultados da pesquisa.

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
Parece muito tempo para digitar.
Tamara Wijsman

2
Get-ChildItem pode ser abreviado como gciou ls.
digitxp

Felizmente, ao contrário de cmd, PowerShellvocê pode usar "Tab" para ver sugestões, como no Linux. Portanto, não são muitos os que digitam, na verdade. E, no meu caso, lsno PowerShell não está funcionando.
WesternGun 25/11

3

Eu simplesmente consegui um programa de localização para Windows . Você só precisa seguir as instruções de leitura e copiar os arquivos .dll e .exe no system32.

A alternativa inclui adicionar o caminho do programa à variável de ambiente PATH.

A idéia é localizar no Windows se você estiver procurando algo como "localizar". :)


Obrigado Cheeku, que parece um aplicativo útil. No entanto, mencionei que não consigo instalar aplicativos no sistema, pois normalmente não são meus sistemas.
dotancohen

2
Sim, mas respondi de qualquer maneira, porque outras pessoas como eu podem achar útil e outras não ficarão confusas, pois este post já tem uma resposta aceita!
Cheeku

1
locateestá no meu computador Win7. Ele reclama que o banco de dados tinha 435 dias, quando a instalação não tinha mais de 3 meses. E updatedbnão está incluído.
vinnief

@inninnief Esse é um problema particular com sua instalação, presumo.
Cheeku

1
@Cheeku - Este é o mesmo aplicativo apontou para por John T . Não é CLI como o OP pediu, mas é incrível.
sancho.s Restabelece Monica

2

A questão é um tanto ambígua.

Você deseja localizar um arquivo (indicado no corpo do OP), mas também deseja um comando / aplicativo "tipo de localização" (indicado no título). Há uma consideração sutil com enormes implicações. Você pode localizar com dois métodos diferentes:

  1. Pesquisando na estrutura da árvore de destino diretamente em cada pesquisa (lenta).

  2. Primeiro, crie um banco de dados da estrutura da árvore de destino (pode ser demorado) e, em seguida, localize pesquisando o banco de dados (muito rápido). O banco de dados deve ser atualizado periodicamente para obter bons resultados nas pesquisas. Veja http://en.wikipedia.org/wiki/Locate_%28Unix%29 .

O Unix locateé do "tipo 2", mas de acordo com o corpo do seu OP, você concorda com qualquer um dos dois métodos. Além disso, você pergunta especificamente sobre as opções da CLI.

Listo abaixo algumas opções e especifico se são CLI / GUI, digite 1/2, e adiciono alguns comentários.

  1. http://locate32.cogit.net/ (já apontado por John T e depois por Cheeku ). GUI, tipo 2. Existe uma versão portátil. Excelente facilidade de uso e configurabilidade. Muito parecido com o Unix locate(que eu usei e gostei muito).
    Nota : Como o Unix está Updatedbdemorando bastante para atualizar um banco de dados (é claro, depende do tamanho da árvore digitalizada), acho locate32 extremamente rápido. Eu não sei como isso pode ser muito melhorado.

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

  3. dir [nome do arquivo] / s , a solução do Windos . CLI, tipo 1.

  4. gci ... , a solução da OldWolf . CLI, tipo 1.

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

  6. Tudo GUI, tipo?


1
Obrigado, esta é uma boa explicação e um bom resumo de opções.
dotancohen


2

Não é necessário instalar manualmente. Veja http://chocolatey.org

choco install winlocate

Reinicie o ambiente do shell

Updatedb.bat -a
Locate.bat somefile

1
O winlocate não está (mais) no Chocolatey.
Lennart

2

Eu sei que este foi respondido há muito tempo, no entanto, este é o meu script para simular a função de localização usada no unix / linux

Salve isso como localize.bat e coloque no System32 OU execute no diretório em que está armazenado. Adota um parâmetro como este "cmd> localize javac.exe"

A opção localizar / c (como um segundo parâmetro contará o número de instâncias) e localize /? exibirá o texto de ajuda

@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 atualizado, mais organizado e pode lidar com uma variedade maior de situações, como permitir qualquer termo de pesquisa e não apenas um nome de arquivo)

@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 do espaço no Windows: fomos abençoados com o Everything Search . Picture dmenu + find + mlocate agrupado em um pequeno e apertado serviço Windows com opções de CLI. Exceto que essa coisa atualiza seu índice em tempo real . Nada no Linux chega perto. Será uma das poucas vezes em que você dirá "caramba, eu gostaria que esse maldito kernel fosse um pouco mais Microsofty"


Utilitário agradável. Obrigado por publicar.
Rudiger Lobo

1

A resposta curta é que não há equivalente exato no Windows . A solução alternativa é usar o comando dir . Este é um comando de lista de diretórios que suporta caracteres especiais e pode ser usado conforme indicado na resposta aceita.

O comando Locate em muitos sistemas semelhantes ao Unix é uma pesquisa baseada em índice. Funciona em conjunto com ocomando Updatedb que indexa sistemas de arquivos. Como se trata de uma pesquisa baseada em índice, geralmente é muito mais rápido que os comandos de pesquisa baseados em texto, como dir e find no Unix, especialmente ao pesquisar hierarquias de diretório profundas.


whereé exatamente o equivalente.
11789

-3

Não conheço nenhum método CLI para fazer isso no Windows. Lembre-se de que a CLI do Windows foi abandonada por usuários comuns, por isso oferece um conjunto de ferramentas geralmente menos maduro. Sua melhor aposta pode estar usando o gnu findno Windows, que você pode obter no GnuWin32 . Se você estiver desenvolvendo um script, basta incluir find.exee suas dependências no script (não se preocupe, não é muito grande).

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.