prosource

PowerShell을 사용한 재귀 파일 검색

probook 2023. 4. 8. 08:40
반응형

PowerShell을 사용한 재귀 파일 검색

모든 폴더에서 파일을 찾고 있습니다.

Copyforbuild.bat여러 곳에서 사용할 수 있기 때문에 재귀적으로 검색해 보고 싶습니다.

$File = "V:\Myfolder\**\*.CopyForbuild.bat"

PowerShell에서는 어떻게 해야 하나요?

Get-ChildItem cmdlet을 사용하여-Recurse★★★★★★★★★★★★★★★★★★:

Get-ChildItem -Path V:\Myfolder -Filter CopyForbuild.bat -Recurse -ErrorAction SilentlyContinue -Force

파일을 찾은 다음 PowerShell에서 결과의 전체 경로를 표시하도록 합니다.

dir -Path C:\FolderName -Filter FileName.fileExtension -Recurse | %{$_.FullName}

할 수 .* FolderName "/"/"FileName.fileExtension §:

dir -Path C:\Folder* -Filter File*.file* -Recurse | %{$_.FullName}

에서는 '찾아보기' 중 를 검색합니다.C:\라는 말로 시작하는 추진력Folder. 라는 이름의 FolderFoo ★★★★★★★★★★★★★★★★★」FolderBarPowerShell 。

파일명과 파일 확장자도 마찬가지입니다.특정 확장자를 가진 파일을 검색하지만 파일 이름을 모르는 경우 다음을 사용할 수 있습니다.

dir -Path C:\FolderName -Filter *.fileExtension -Recurse | %{$_.FullName}

또는 그 반대:

dir -Path C:\FolderName -Filter FileName.* -Recurse | %{$_.FullName}

이 있는 를 검색하는 등).C:\Users는 다음과 를 사용합니다.

Get-ChildItem -Path V:\Myfolder -Filter CopyForbuild.bat -Recurse -ErrorAction SilentlyContinue -Force

고심 끝에 생각해 낸 방법은 다음과 같습니다.

Get-ChildItem -Recurse -Path path/with/wildc*rds/ -Include file.*

출력을 클린하게 하려면(경로만) 다음을 사용합니다.

(Get-ChildItem -Recurse -Path path/with/wildc*rds/ -Include file.*).fullname

첫 번째 결과만 얻으려면 다음을 사용합니다.

(Get-ChildItem -Recurse -Path path/with/wildc*rds/ -Include file.*).fullname | Select -First 1

이제 중요한 것에 대해 설명하겠습니다.

사용하지 않는 파일/디렉토리만 검색하려면-File ★★★★★★★★★★★★★★★★★」-Directory( ( ( ( ( ( 。대신 파일에는 다음과 같이 사용합니다.

Get-ChildItem -Recurse -Path ./path*/ -Include name* | where {$_.PSIsContainer -eq $false}

뺄게요.-eq $false를 참조해 주세요.다음과 같은 후행 와일드카드를 남기지 마십시오.bin/*

내장된 스위치를 사용하는 것은 어떨까요?이러한 기능은 끔찍하고 무작위로 제거됩니다.를 들면, 「」를 는,-Include파일의 경우는, 와일드 카드로 패스를 종료할 필요가 있습니다. '먹다', '먹다', '먹다', '먹다'가 됩니다.-Recurse다음과 같이 합니다.

Get-ChildItem -File -Recurse -Path ./bin/* -Include *.lib

것을 수 있을 *.lib 서브디렉토리에의 「」, 「」, 「」, 「」만을 실시합니다.bin.

하려면 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , .-Directory, 와일드카드를 삭제해야 이유로든, 은, 「」를 해제하지 .-Recurse이러한 이유로 내장 플래그를 사용하지 않는 것이 좋습니다.

이 명령어는 대폭 단축할 수 있습니다.

Get-ChildItem -Recurse -Path ./path*/ -Include name* | where {$_.PSIsContainer -eq $false}

된다

gci './path*/' -s -Include 'name*' | where {$_.PSIsContainer -eq $false}
  • Get-ChildItem입니다.gci
  • -Path이므로 첫 인수 경로만 수 .따라서 첫 번째 인수 패스를 작성하기만 하면 됩니다.
  • -Recurse입니다.-s
  • -Include
  • 명령어 전체를 큰따옴표로 둘러싸 명령 프롬프트에서 사용할 수 있도록 이름/경로 공백에 작은따옴표를 사용합니다.반대로 하면(작은 따옴표로 둘러싸인 경우) 오류가 발생합니다.
Get-ChildItem V:\MyFolder -name -recurse *.CopyForbuild.bat

동작도 가능

이것을 시험해 보세요.

Get-ChildItem -Path V:\Myfolder -Filter CopyForbuild.bat -Recurse | Where-Object { $_.Attributes -ne "Directory"}

와일드카드를 사용한 필터:

Get-ChildItem -Filter CopyForBuild* -Include *.bat,*.cmd -Exclude *.old.cmd,*.old.bat -Recurse

정규 표현을 사용한 필터링:

Get-ChildItem -Path "V:\Myfolder" -Recurse
| Where-Object { $_.Name -match '\ACopyForBuild\.[(bat)|(cmd)]\Z' }

@user3303020에 answer를 추가하고 검색 결과를 파일로 출력하려면 다음을 수행합니다.

Get-ChildItem V:\MyFolder -name -recurse *.CopyForbuild.bat > path_to_results_filename.txt

이 방법으로 올바른 파일을 검색하는 것이 더 쉬울 수 있습니다.

Windows 시스템의 경우:c:\temp' dir 및 subdirs 내의 모든 .py 파일을 검색합니다.dir - r *.py 또는 dir *.py -r 라고 입력합니다.

*Nix(Linux/MacOs 시스템: 터미널에서 /temp -name *.py를 찾습니다.

저는 이거면 돼요.

일반적으로 로보카피는 병렬 스레드에서 여러 파일을 검색하는 가장 빠르고 간단한 방법입니다.이를 극복하기 위해서는 병렬 처리를 갖춘 꽤 좋은 Powersell 코드가 필요합니다.여기 제가 과거에 작성한 기사에 대한 링크가 있습니다.여러분이 가지고 있는 다양한 옵션:Powershell을 통해 특정 파일의 전체 경로를 찾는 가장 빠른 방법?가장 적합한 코드는 승인된 답변을 확인하십시오.

언급URL : https://stackoverflow.com/questions/8677628/recursive-file-search-using-powershell

반응형