Windows에서 Unix find 명령과 동일


34

Windows 에서 Unix find 명령에 해당하는 것은 무엇입니까 ?

나는 find.exeWindows에서 더 비슷 하다는 것을 알았 습니다 grep. 나는 특히

find . -name [filename]

2
내 대답에 문제가 있습니까? 개선 할 수 있습니까? 여전히 도움이 필요하십니까?
JohannesM

죄송합니다. 얼마 전이 스레드를 보지 못했습니다. 빠른 답변을받지 못한 것에 대한 답변과 사과에 감사드립니다.
ARV

답변:


21
dir <drive: [drive:]> /s | findstr /i <pattern>

-대안-

dir /s <drive:>\<pattern>

dir c: d: /s | findstr /i example.txt

-대안-

dir /s c:\example.txt

dir c: /s example.txt작동합니다.
DevSolar

@DevSolar 명령을 다시 확인할 수 있습니까? Windows 5.1 Build 2600 SP3에서 테스트 한 결과, 명령은 디렉토리 c에있는 파일 목록을 제공합니다.
JohannesM

1
어 ... 미안 기억에서 타이핑 할 권리가 있습니다. dir /s C:\example.txt그것은.
DevSolar

1
가장 유사한 결과를 \b위해 내가 간략하게 사용 합니다 (출력 전용 경로). find <folder> -name <pattern>-> dir /s /b <folder><pattern>. 예 : find /tmp -name *.txt-> dir \s \b C:\temp\*.txt. 그러나 dir항상 절대 경로 목록을 반환하는 반면 find항상 앞에 접두사가 붙습니다<folder>
Hashbrown

28

Find-ChildItemWindows Powershell 의 Cmdlet은 Unix / Linux find 명령과 동일합니다.

http://windows-powershell-scripts.blogspot.in/2009/08/unix-linux-find-equivalent-in.html

Find-ChildItem 옵션 중 일부

  1. Find-ChildItem -Type f -Name ".*.exe"
  2. Find-ChildItem -Type f -Name "\.c$" -Exec "Get-Content {} | Measure-Object -Line -Character -Word"
  3. Find-ChildItem -Type f -Empty
  4. Find-ChildItem -Type f -Empty -OutObject
  5. Find-ChildItem -Type f -Empty -Delete
  6. Find-ChildItem -Type f -Size +9M -Delete
  7. Find-ChildItem -Type d
  8. Find-ChildItem -Type f -Size +50m -WTime +5 -MaxDepth 1 -Delete

공개 : 저는 Find-ChildItemcmdlet 개발자입니다


2
고맙습니다. 이것은 내가이 질문에 대답 할 때 찾고있는 것을 더 염두에두고 있습니다.
supercheetah

7
Find-ChildItem공식 cmdlet이 아니며 PowerShell에 포함되지 않습니다. 이 남자는 일부 남자의 OneDrive에서이 cmdlet을 다운로드해야합니다 . bash, cygwin, unixutils 또는 UNIX를 실행할 수있는 다른 프로그램을 다운로드하는 것에는 차이가 없습니다 find.
walen

19

추가 cmdlet이 설치되어 있지 않으면 간단히 다음을 사용할 수 있습니다 Get-ChildItem.

Get-ChildItem -Filter *.zip -Recurse $pwd

1
이 경우에 당신은 아마 짧은 별칭 중 하나를 사용하려면 dir, ls또는 gci당신이 스크립트를 작성하지 않는 한,.
Swonkie

5

당신은 디렉토리 계층 구조에서 파일을 검색 유닉스의 발견을 사용하는 경우, 파워 쉘의 방법은 사용하는 것입니다 Get-ChildItem(별명이다 gci) cmdlet를하고 함께 결과를 필터링 Where-Object(별칭이다 where) cmdlet을.

예를 들어, C:\Users\이름에 'essential'이라는 단어가 포함 된 모든 파일 ( 재귀 적으로 시작하여 재귀 적으로) 을 찾으 려면 다음을 사용하십시오.

PS> gci -Path "C:\Users\"  -Recurse | where {$_.Name -like '*essential*'}

-like옵션을 사용하면 패턴 일치에 와일드 카드를 사용할 수 있습니다.


2

이것은 정확히 GNU 찾기는 아니지만 powershell의 Linux 명령 줄 철학과 더 일치합니다.

PS> dir -recurse -ea 0 | % FullName | sls <grep_string>

예:

PS> cd C:\
PS> dir -recurse -ea 0 | % FullName | sls "Program" | sls "Microsoft"
PS> dir -recurse -ea 0 | % FullName | sls "Program" | sls "Microsoft" | out-gridview

참고 : "| % FullName"뒤에 반환 된 모든 것은 개체 대신 문자열입니다.

그러나 Where 연산자 인 "?"를 사용하면 더 많은 작업을 수행 할 수 있습니다.

PS> cd C:\
PS> dir -Recurse -ea 0 | ? FullName -like "*Program*" 
                       | ? FullName -like "*Microsoft*" 
                       | % FullName 
                       | out-gridview

빠른 바로 가기는 다음과 같습니다.

PS> function myfind {dir -recurse -ea 0 | % FullName | sls $args }

PS> cd C:\
PS> myfind "Programs" | sls "Microsoft"

#find all text files recursively from current directory
PS> myfind "\.txt$"

#find all files recursively from current directory
PS> myfind .

UnixUtils에서 -exec grep {}가 제대로 작동하지 않습니다. "그러한 파일이나 디렉토리가없는 것 같습니다". 이 솔루션 : 배치 스크립트 내에서 PowerShell.exe -Command "dir -Recurse -ea 0 |? FullName -like '* .log'| sls error"가 작동합니다. 참고 : 작은 따옴표 안에 큰 따옴표를 사용해야합니다.
kevinf
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.