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


17

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

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


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: и проверить весь диск.


Если вы ищете по всему диску общее имя файла, он может также заплатить, чтобы включить / 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..]
    }

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, это выглядит как удобное приложение. Однако я упомянул, что не могу устанавливать приложения в системе, поскольку они, как правило, не являются моими системами.
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, типа?


1
Спасибо, это хорошее объяснение и хорошее резюме вариантов.
dotancohen



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, особенно при поиске в глубокой иерархии каталогов.


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

-3

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.