Unix-тип «найти» в Windows?

17

Используя Windows CLI (cmd), как найти файл, часть которого ему известна? Например, каждая отдельная рабочая станция Windows устанавливает javac в другое место, как найти его из интерфейса командной строки Windows (cmd)?

Поиск в Google Я вижу упоминание только об использовании графического интерфейса Windows Explorer (файлового менеджера) или загрузке некоторых бесплатных приложений. Разве в Windows нет встроенной команды locate? Есть ли в редакции сервера? Я не хочу устанавливать Cygwin или что-то еще, как правило, это не мои машины.

dotancohen
источник
3
Ничто из встроенного в командную строку Windows не похоже на поиск. Я бы порекомендовал locate32 ( locate32.net )
Джон Т
javacобычно должно быть в том же месте ...
Тамара Вийсман
1
@JohnT это местоположение больше не работает - обновленный дом locate32
locate32.cogit.net
1
Попробуйте Git-Bash.exe или MINGW, который включает в себя locateи updatedb--per stackoverflow.com/questions/36841241/…
MarkHu

Ответы:

22

Вы должны быть в состоянии сделать то, что вам нужно сделать с dir:

dir [filename] /s

Замените [имя файла] на имя файла, который вы ищете, вы должны быть в состоянии использовать подстановочные знаки. / s делает поиск в подкаталогах, поэтому при необходимости вы можете начать с корня C: и проверить весь диск.

Windos
источник
Если вы ищете по всему диску общее имя файла, он может также заплатить, чтобы включить / p, чтобы он одновременно отображал только страницу результатов.
Windos
Спасибо, это выглядит идеально. Я часто знаю, по крайней мере, что мне нужно искать в C: \ WINDOWS, чтобы это могло сузить время поиска.
dotancohen
1
Я не думаю, что javacустановлено на C:\WINDOWS...
Тамара Вийсман
Не работает с несколькими дисками / разделами. И даже в 2011 году у меня было больше, чем просто местонахождение C: Linux, не заботящееся о файловых системах.
Юрген А. Эрхард
1
@ JürgenA.Erhard, чтобы быть справедливым ... Самому Linux на самом деле нет дела до «файловых систем», поскольку Windows представляет их (насколько я понимаю). В наши дни, если вы хотите искать по нескольким дискам, PowerShell будет моим выбором. к тому же, поскольку вы сможете сгруппировать все свои тома и пистолет Get-ChildItem на всех них.
Уиндос
12

Никто не говорит о "где" команда? это поиск исполняемого файла в PATH текущей среды.

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

У Виндоса самый простой ответ. Но если вам нравится командная строка, вы можете посмотреть на powershell. Чтобы выполнить тот же тип поиска, который вы используете

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

Который имеет приятное побочное преимущество, заключающееся в том, что его можно использовать в удобном выражении foreach и запускать процесс с результатами поиска.

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..]
    }
OldWolf
источник
3
Это слишком долго, чтобы напечатать.
Тамара Вийсман
2
Get-ChildItem может быть сокращен до gciили ls.
digitxp
К счастью, в отличие от in cmd, PowerShellвы можете использовать «Tab» для просмотра предложений, как в Linux. Так что печатать на самом деле не так уж и много. И, в моем случае, lsв PowerShell не работает.
WesternGun
3

Я просто получил программу поиска для Windows . Вам просто нужно следовать инструкциям read me и скопировать файлы .dll и .exe в system32.

Альтернатива включает добавление пути к программе в переменную окружения PATH.

Идея состоит в том, чтобы найти в Windows, если вы ищете что-то «как» найти. :)

Cheeku
источник
Спасибо Cheeku, это выглядит как удобное приложение. Однако я упомянул, что не могу устанавливать приложения в системе, поскольку они, как правило, не являются моими системами.
Dotancohen
2
Да, но я все равно ответил, потому что другие люди, как я, могут найти это полезным, и другие не будут смущены, так как этот пост уже имеет принятый ответ!
Cheeku
1
locateна моем компьютере Win7. Он жалуется на то, что базе данных 435 дней, а возрастом не более 3 месяцев. И updatedbне входит.
Винниф
@vinnief Это особая проблема с вашей установкой, я полагаю.
Cheeku
1
@Cheeku - Это одно и то же приложение указал на Джона Т . Это не CLI, как спросил ОП, но это потрясающе.
sancho.s Восстановить Монику
2

Вопрос несколько двусмысленный.

Вы хотите найти файл (указан в теле OP), но вам также нужна команда / приложение «locate-type» (указано в заголовке). Есть одно тонкое соображение с огромными последствиями. Вы можете найти с помощью двух разных методов:

  1. Поиск целевой древовидной структуры непосредственно в каждом поиске (медленный).

  2. Сначала создается база данных целевой древовидной структуры (может занимать много времени), а затем выполняется поиск по базе данных (очень быстро). База данных должна периодически обновляться, чтобы получить хорошие результаты в поисках. См. Http://en.wikipedia.org/wiki/Locate_%28Unix%29 .

Unix locateимеет «тип 2», но в соответствии с телом вашего OP, вы будете в порядке с любым из двух методов. Более того, вы спрашиваете конкретно о параметрах CLI.

Ниже я перечисляю некоторые параметры, и я указываю, являются ли они CLI / GUI, типа 1/2, и я добавляю некоторые комментарии.

  1. http://locate32.cogit.net/ (на него уже указал Джон Т, а затем Чику ). GUI, тип 2. Есть портативная версия. Выдающаяся простота использования и настраиваемость. Очень похоже на Unix locate(который я использовал и очень понравился).
    Примечание : я привык к тому, что Unix Updatedbзанимал довольно много времени для обновления базы данных (конечно, это зависит от размера отсканированного дерева), я нахожу это locate32 чрезвычайно быстро. Я не знаю, как это можно улучшить.

  2. http://sourceforge.net/projects/winlocate/ CLI, тип 2.

  3. dir [имя файла] / s , решение от Windos . CLI, тип 1.

  4. gci ... , решение от OldWolf . CLI, тип 1.

  5. http://gnuwin32.sourceforge.net/packages/findutils.htm CLI, тип 2.

  6. Все GUI, типа?

sancho.s Восстановить Монику
источник
1
Спасибо, это хорошее объяснение и хорошее резюме вариантов.
dotancohen
2

Не нужно устанавливать вручную. Смотрите http://chocolatey.org

choco install winlocate

Перезапустите среду оболочки

Updatedb.bat -a
Locate.bat somefile
Джонатан
источник
1
winlocate больше не существует на Chocolatey.
Леннарт
2

Я знаю, что на этот вопрос давным-давно ответили, однако это мой скрипт для имитации функции поиска, используемой в unix / linux

Сохраните его как locate.bat и поместите в System32 ИЛИ запустите из каталога, в котором он хранится. Принимает один параметр, например «cmd> locate javac.exe»

Переключатель locate / c (в качестве второго параметра будет подсчитывать количество экземпляров) и locate /? отобразит текст справки

@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

Для будущих космических историков Windows: мы были благословлены поиском всего . Изображение dmenu + find + mlocate, свернутое в узкую, довольно симпатичную службу Windows с параметрами cli. Кроме того, эта вещь обновляет свой индекс в режиме реального времени . Ничто в Linux не подходит близко. Это будет один из тех немногих случаев, когда вы скажете: «Ну и дела, я бы хотел, чтобы это чертово ядро ​​было немного больше Microsofty»

Стив Горансон
источник
Хорошая утилита. Спасибо за публикацию.
Rudiger Wolf
1

Короткий ответ: точного эквивалента в Windows нет . Обходной путь должен использовать команду dir . Это команда списка каталогов, которая поддерживает специальные символы и может использоваться, как указано в принятом ответе.

Команда Locate во многих Unix-подобных системах является поиском по индексу. Он работает в тандеме с командой updatedb, которая индексирует файловые системы. Поскольку это поиск по индексу, он обычно намного быстрее, чем текстовые команды поиска, такие как dir и find в Unix, особенно при поиске в глубокой иерархии каталогов.

DWW
источник
whereявляется точным эквивалентом.
Alex78191
-3

Я не знаю ни одного метода CLI для этого в Windows. Имейте в виду, что интерфейс командной строки Windows был заброшен обычными пользователями, поэтому он предлагает в целом менее зрелый набор инструментов. Лучшим вариантом может быть использование gnu findв Windows, которую вы можете получить от GnuWin32 . Если вы разрабатываете сценарий, вам просто нужно включить find.exeи его зависимости со сценарием (не волнуйтесь, он не очень большой).

jcrawfordor
источник