재귀 적으로 디렉토리 패턴을 제외 할 수 없습니다


30

폴더의 하위 항목을 재귀 적으로 가져 오려고합니다. 그러나 폴더에는 노이즈 파일과 폴더가 포함되어 있습니다 (실제로는 Visual Studio 프로젝트 폴더 임).

여기 내가 가진 것 :

$root = Get-Item C:\Projects\MyProject

$allItems =  Get-ChildItem $root -Recurse -exclude "**\pkgobj\*"

그러나 $allItems여전히 경로와 일치하는 파일 및 폴더가 포함되어 있습니다.

내가 뭘 잘못 했어?

더 정확하게 말하면 폴더와 파일을 모두 가져 오지만 지정된 폴더와 그 하위 항목은 모두 가져 오지 않습니다.

나는 또한 시도했다 :

foreach($item in $allItems){
    if($item.FullName -notmatch "pkgobj") {
        Write-Host -ForegroundColor Green $item.FullName.Replace($root,'')

    }
}

그러나 더 이상 성공하지

답변:


44

문제를 이해하는 데 시간이 걸렸습니다. 까다로운 것입니다.

-exclude원하는 myfile.txt전체 이름
(예 :)이 아닌 항목의 기본 이름 (예 :)에만 적용됩니다 C:\pkgobj\myfile.txt. 여기서 제외를 사용할 수 없습니다 .

그러나 Fullnameand를 사용하는 해결 방법이 있습니다.-notlike

$root = "C:\Projects\MyProject"
$allitems = Get-ChildItem $root -Recurse | Where {$_.FullName -notlike "*\pkgobj\*"} 

1
그러나 node_modules와 같은 성능으로 인해 큰 디렉토리를 제외하려는 경우 여전히 모든 것을 재귀 적으로 확인하고 나중에 필터링하므로 도움이되지 않습니다.
Pluc

이건 어때? Get-ChildItem -exclude exclude_dir | foreach {Get-ChildItem -Path $ _ -Include * .include -Recurse -Exclude * .excludefile | foreach {echo $ _}}
NN_
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.