Windows에서 유닉스 유형 "위치"?


17

Windows CLI (cmd)를 사용하여 이름의 일부를 알고있는 파일을 어떻게 찾습니까? 예를 들어, 모든 단일 Windows 워크 스테이션은 다른 위치에 javac를 설치합니다. 어떻게 Windows CLI (cmd)에서 javac를 찾을 수 있습니까?

인터넷 검색 Windows 탐색기 (파일 관리자) GUI를 사용하거나 일부 프리웨어 응용 프로그램을 다운로드하는 것에 대해서만 언급했습니다. Windows에는 실제로 찾기 명령이 내장되어 있지 않습니까? 서버 에디션이 있습니까? 나는 할 수 없습니다 , 다음은 일반적으로 내 컴퓨터 없습니다 Cygwin에서 또는 다른 것을 설치하려고합니다.


3
Windows 명령 줄에 기본 제공되는 것은 찾기와 거의 비슷하지 않습니다. locate32 ( locate32.net )을 추천합니다
John T

javac일반적으로 같은 장소에 있어야합니다 ...
Tamara Wijsman

1
해당 위치가 더 이상 작동하지 않는 @JohnT-업데이트 된 locate32 홈은 locate32.cogit.net입니다.
TrojanName

1
Git-Bash.exe (일명 MINGW) locateupdatedb--per stackoverflow.com/questions/36841241/…
MarkHu

답변:


22

당신은 당신이해야 할 일을 할 수 있어야합니다 dir:

dir [filename] /s

[filename]을 원하는 파일 이름으로 바꾸십시오. 와일드 카드를 사용할 수 있습니다. / s는 하위 디렉토리를 검색하므로 필요한 경우 C :의 루트에서 시작하여 전체 드라이브를 확인할 수 있습니다.


전체 드라이브에서 공통 파일 이름을 검색하는 경우 / p를 포함하여 한 번에 결과 페이지 만 표시하도록 비용을 지불 할 수도 있습니다.
Windos

고마워요, 완벽 해 보입니다. 최소한 C : \ WINDOWS에서 검색해야하므로 검색 시간이 좁아 질 수 있다는 사실을 종종 알고 있습니다.
dotancohen

1
나는 그것이 javac설치되어 있다고 생각하지 않습니다 C:\WINDOWS...
Tamara Wijsman

여러 드라이브 / 파티션에서 작동하지 않습니다. 그리고 2011 년에도 C : 그 이상을 가졌습니다. Linux의 locate는 파일 시스템에 신경 쓰지 않습니다.
Jürgen A. Erhard

1
@ JürgenA.Erhard 공정한 ... Linux 자체는 Windows가 파일을 제시하는 것처럼 '파일 시스템'에 대해 실제로 신경 쓰지 않습니다. 그러나 모든 볼륨과 총 Get-ChildItem을 모두 그룹화 할 수 있기 때문에.
Windos

12

"where"명령에 대해 아무도 이야기하지 않습니까? 현재 환경의 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

Windos가 가장 간단한 답변을 제공합니다. 그러나 명령 줄을 좋아한다면 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
입력하기에는 너무 오래 느낍니다.
Tamara Wijsman

2
Get-ChildItem은 gci또는 로 축약 될 수 있습니다 ls.
digitxp

달리 다행히도 cmdPowerShell당신이 리눅스에서 같은 제안을보고 "탭"을 사용할 수 있습니다. 실제로 입력하는 것은 그리 많지 않습니다. 그리고 제 경우 ls에는 PowerShell에서 작동하지 않습니다.
WesternGun

3

나는 단순히 Windows를위한케이트 프로그램을 얻었다 . 읽어보기 지침을 따르고 .dll 파일과 .exe를 system32에 복사하면됩니다.

대안은 환경 변수 PATH에 프로그램 경로를 추가하는 것을 포함합니다.

아이디어는 "같은"위치를 찾고 있다면 Windows에서 위치를 찾는 것입니다. :)


편리한 응용 프로그램처럼 보이는 Cheeku에게 감사합니다. 그러나 나는 일반적으로 내 시스템이 아니기 때문에 시스템에 응용 프로그램을 설치할 수 없다고 언급했습니다 .
dotancohen

2
예,하지만 어쨌든 나와 같은 다른 사람들이 유용하다는 것을 알 수 있기 때문에 어쨌든 대답했습니다.이 게시물에는 이미 허용 된 답변이 있기 때문에 다른 사람들은 혼란스럽지 않습니다!
Cheeku

1
locate내 Win7 컴퓨터에 있습니다. 인탈 레이션이 3 개월을 넘지 않은 데이터베이스는 435 일이 지난 것에 대해 불평합니다. 그리고 updatedb포함되어 있지 않습니다.
vinnief

@vinnief 설치와 관련된 특정 문제입니다.
Cheeku

1
@Cheeku-이것은 John T가 지적한 것과 동일한 앱 입니다. OP가 요청한 것처럼 CLI는 아니지만 훌륭합니다.
sancho.s Reinstate Monica

2

문제는 다소 모호합니다.

파일을 찾으려고하지만 (OP 본문에 명시되어 있음) "위치 유형"명령 / 앱 (제목에 명시되어 있음)도 필요합니다. 큰 의미가있는 미묘한 고려 사항이 하나 있습니다. 두 가지 방법으로 찾을 수 있습니다.

  1. 각 검색에서 대상 트리 구조를 직접 검색합니다 (느리게).

  2. 먼저 대상 트리 구조의 데이터베이스를 작성하고 (시간이 오래 걸릴 수 있음) 데이터베이스를 검색하여 위치를 찾습니다 (매우 빠름). 검색에서 좋은 결과를 얻으려면 데이터베이스를 정기적으로 업데이트해야합니다. http://en.wikipedia.org/wiki/Locate_%28Unix%29를 참조하십시오 .

유닉스 locate는 "유형 2"이지만 OP의 본문에 따라 두 가지 방법 중 하나를 사용하면 문제가 없습니다. 또한 CLI 옵션에 대해 구체적으로 묻습니다.

아래에 몇 가지 옵션을 나열하고 CLI / GUI인지 여부를 입력하고 1/2을 입력 한 후 주석을 추가합니다.

  1. http://locate32.cogit.net/ (이미 John T가 지적한 다음 Cheeku ). GUI, 유형 2입니다. 이식 가능한 버전이 있습니다. 뛰어난 사용 편의성 및 구성 가능성. 유닉스와 매우 비슷합니다 locate(많이 사용하고 좋아했습니다).
    참고 : 유닉스의가 사용되는 Updatedb데이터베이스를 업데이트 (물론,이 스캔 된 나무의 크기에 따라 달라집니다) 꽤 오래 걸려, 내가 찾을 locate32 매우 빠르게. 어떻게 그렇게 많이 개선 될 수 있는지 모르겠습니다.

  2. http://sourceforge.net/projects/winlocate/ CLI, 2를 입력 하십시오 .

  3. dir [filename] / s , Windos의 솔루션 . CLI, 1을 입력하십시오.

  4. gci ... , OldWolf의 솔루션 . CLI, 1을 입력하십시오.

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

  6. 모든 GUI에?를 입력하십시오.


1
감사합니다. 이것은 좋은 설명이며 훌륭한 옵션 요약입니다.
dotancohen


2

손으로 설치할 필요가 없습니다. http://chocolatey.org 참조

choco install winlocate

쉘 환경 재시작

Updatedb.bat -a
Locate.bat somefile

1
winlocate는 Chocolatey에 더 이상 없습니다.
Lennart

2

나는 이것이 오래 전에 응답되었다는 것을 알고 있지만, 이것은 유닉스 / 리눅스에서 사용되는 찾기 기능을 시뮬레이션하는 스크립트입니다.

이것을 locate.bat로 저장하고 System32에 저장하거나 저장된 디렉토리에서 실행하십시오. "cmd> locate javac.exe"와 같은 매개 변수를 사용하십시오.

locate / c 스위치 (두 번째 매개 변수로서 인스턴스 수를 계산)와 /? 도움말 텍스트를 표시합니다

@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 역사가들을 위해 : 우리는 Everything Search 로 축복 받았습니다 . 그림 dmenu + find + mlocate는 CLI 옵션이 포함 된 빡빡한 Windows 서비스로 롤업되었습니다. 이 것을 제외하고는 실시간으로 색인을 업데이트합니다 . 리눅스에는 아무것도 가깝지 않습니다. "이 대담한 커널이 좀 더 마이크로 소프트가 되었으면 좋겠다"고 말하는 것은 몇 번일 것입니다.


좋은 유틸리티. 게시 해 주셔서 감사합니다.
Rudiger Wolf

1

짧은 대답은 Windows에는 정확히 동등한 것이 없다는 것입니다 . 해결 방법은 dir 명령 을 사용하는 것 입니다. 특수 문자를 지원하는 디렉토리 목록 명령이며 허용되는 답변에서 지적한대로 사용할 수 있습니다.

찾기 시스템과 같은 많은 유닉스 명령은 인덱스 기반 검색입니다. 파일 시스템을 색인화 하는 Updatedb 명령 과 함께 작동 합니다. 인덱스 기반 검색이므로 일반적으로 딥 디렉토리 계층 구조를 검색 할 때 Unix에서 dirfind 와 같은 텍스트 기반 검색 명령보다 훨씬 빠릅니다 .


where정확히 동일합니다.
Alex78191

-3

Windows 에서이 작업을 수행하는 CLI 방법을 알지 못합니다. Windows CLI는 일반 사용자가 버렸으므로 일반적으로 덜 성숙한 도구 세트를 제공합니다. 가장 좋은 방법은 GnuWin32find 에서 얻을 수있는 Windows 에서 gnu 를 사용 하는 것 입니다. 스크립트를 개발하는 경우 스크립트 와 스크립트의 종속성 만 포함 하면됩니다 (걱정하지 않아도됩니다).find.exe

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.