programing

Get-Child Item을 사용하여 디렉토리만 가져오려면 어떻게 해야 합니까?

padding 2023. 4. 8. 08:02
반응형

Get-Child Item을 사용하여 디렉토리만 가져오려면 어떻게 해야 합니까?

PowerShell 2.0을 사용하고 있는데 특정 경로의 모든 하위 디렉토리를 파이프 아웃하려고 합니다.다음 명령어는 모든 파일과 디렉토리를 출력하지만 파일을 필터링하는 방법을 알 수 없습니다.

Get-ChildItem c:\mypath -Recurse

사용해보았습니다.$_.Attributes속성을 얻으려면 , 그러나 어떻게 문자 그대로의 인스턴스를 구축해야 하는지 모르겠다.System.IO.FileAttributes비교할 수 있습니다.cmd.exe그건 그럴 것이다.

dir /b /ad /s

PowerShell 3.0 이후의 경우:

Get-ChildItem -Directory

에일리어스를 사용할 수도 있습니다.dir,ls,그리고.gci


PowerShell 3.0 이전 버전의 경우:

FileInfo에 의해 반환된 오브젝트Get-ChildItem"베이스" 속성을 가지고 있습니다.PSIsContainer. 해당 항목만 선택하려고 합니다.

Get-ChildItem -Recurse | ?{ $_.PSIsContainer }

디렉토리의 원시 문자열 이름을 원할 경우 다음을 수행할 수 있습니다.

Get-ChildItem -Recurse | ?{ $_.PSIsContainer } | Select-Object FullName

PowerShell 3.0에서는 다음과 같이 심플합니다.

Get-ChildItem -Directory #List only directories
Get-ChildItem -File #List only files

사용하다

Get-ChildItem -dir #lists only directories
Get-ChildItem -file #lists only files

에일리어스를 선호하는 경우

ls -dir #lists only directories
ls -file #lists only files

또는

dir -dir #lists only directories
dir -file #lists only files

하위 디렉토리도 다시 검색하려면-r선택.

ls -dir -r #lists only directories recursively
ls -file -r #lists only files recursively 

PowerShell 4.0, PowerShell 5.0(Windows 10), PowerShell Core 6.0(Windows 10, Mac 및 Linux) 및 PowerShell 7.0(Windows 10, Mac 및 Linux)에서 테스트 완료.

참고: PowerShell Core에서 심볼링크를 지정하면-r전환합니다.심볼 링크를 따라가려면-FollowSymlink와 교환하다.-r.

2: PowerShell은 버전 6.0 이후 크로스 플랫폼이 되었습니다.크로스 플랫폼 버전은 원래 PowerShell Core라고 불렀지만 PowerShell 7.0+ 이후 "Core"라는 단어는 삭제되었습니다.

Get-ChildItem 매뉴얼:https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.management/get-childitem

보다 깔끔한 접근법:

Get-ChildItem "<name_of_directory>" | where {$_.Attributes -match'Directory'}

PowerShell 3.0에 디렉토리만 반환하는 스위치가 있는지 궁금합니다.추가하는 것은 논리적인 것 같습니다.

용도:

dir -r | where { $_ -is [System.IO.DirectoryInfo] }

PowerShell v2 이후 버전(k는 검색을 시작하는 폴더를 나타냅니다)에서 다음을 수행합니다.

Get-ChildItem $Path -attributes D -Recurse

폴더 이름만 사용하고 다른 이름은 사용하지 않는 경우 다음을 사용하십시오.

Get-ChildItem $Path -Name -attributes D -Recurse

특정 폴더를 찾는 경우 다음을 사용할 수 있습니다.이 경우 다음 폴더를 찾고 있습니다.myFolder:

Get-ChildItem $Path -attributes D -Recurse -include "myFolder"

이 방법에서는 텍스트가 적게 필요합니다.

ls -r | ? {$_.mode -match "d"}

승인된 답변에는 다음과 같은 내용이 있습니다.

Get-ChildItem -Recurse | ?{ $_.PSIsContainer } | Select-Object FullName

"원시 스트링"을 얻습니다.하지만 사실 타입의 오브젝트는Selected.System.IO.DirectoryInfo반환됩니다.원시 문자열의 경우 다음을 사용할 수 있습니다.

Get-ChildItem -Recurse | ?{ $_.PSIsContainer } | % { $_.FullName }

값이 문자열에 연결되어 있는 경우 차이는 중요합니다.

  • 와 함께Select-Object의외로foo\@{FullName=bar}
  • ForEach -예상대로: -예상대로입니다.foo\bar

용도:

dir -Directory -Recurse | Select FullName

디렉토리 전용 폴더명을 가지는 루트 구조의 출력이 표시됩니다.

먼저 Get-ChildItem을 사용하여 모든 폴더와 파일을 반복적으로 가져올 수 있습니다.그런 다음 파일만 가져오는 Where-Object 절에 출력을 파이프합니다.

# one of several ways to identify a file is using GetType() which
# will return "FileInfo" or "DirectoryInfo"
$files = Get-ChildItem E:\ -Recurse | Where-Object {$_.GetType().Name -eq "FileInfo"} ;

foreach ($file in $files) {
  echo $file.FullName ;
}

용도:

Get-ChildItem \\myserver\myshare\myshare\ -Directory | Select-Object -Property name |  convertto-csv -NoTypeInformation  | Out-File c:\temp\mydirectorylist.csv

그 결과, 다음과 같은 것이 실현됩니다.

  • 로케이션의 합니다.Get-ChildItem \\myserver\myshare\myshare\ -Directory
  • 합니다.Select-Object -Property name
  • 형식( 형식)으로 변환합니다.convertto-csv -NoTypeInformation
  • 를 파일에 Out-File c:\temp\mydirectorylist.csv

다음의 스크립트를 사용하면, 보다 읽기 쉽고 심플한 어프로치를 실현할 수 있습니다.

$Directory = "./"
Get-ChildItem $Directory -Recurse | % {
    if ($_.Attributes -eq "Directory") {
        Write-Host $_.FullName
    }
}

이게 도움이 됐으면 좋겠네요!

이 솔루션은 TechNet 기사 Fun Things You Can Do with the Get-Child Item cmdlet을 기반으로 합니다.

Get-ChildItem C:\foo | Where-Object {$_.mode -match "d"}

대본에 썼는데 잘 되더라고요.

이 질문은 정확하고 잘 대답한 질문이지만, 제가 지금 보고 있기 때문에 뭔가 더 덧붙여야겠다고 생각했습니다.

Get-ChildItem는 두 가지 유형의 객체를 생성하는 반면 대부분의 명령어는 하나만 생성합니다.

FileInfo디렉토리정보가 반환됩니다.

이 명령어로 사용할 수 있는 'members'를 다음과 같이 표시하면 이를 확인할 수 있습니다.

Get-ChildItem | Get-Member
  • 유형 이름:시스템.IO. 디렉토리정보
  • 유형 이름:시스템.IO.FileInfo

각 유형별로 사용 가능한 다양한 메서드와 속성을 볼 수 있습니다.차이가 있다는 점에 유의하십시오.를 들어 FileInfo 객체에 길이 속성이 있지만 디렉토리는정보 개체는 그렇지 않습니다.

어쨌든 기술적으로는 디렉토리를 분리함으로써 디렉토리만 반환할 수 있습니다.Info 오브젝트

Get-ChildItem | Where-Object {$_.GetType().Name -eq "DirectoryInfo"}

맨 에서 언급했듯이 사용하시는 입니다.Get-ChildItem -Directory하지만 이제 멀티플 오브젝트 타입으로 작업하는 방법을 알게 되었습니다.

다음 항목 사용:

Get-ChildItem -Path \\server\share\folder\ -Recurse -Force | where {$_.Attributes -like '*Directory*'} | Export-Csv -Path C:\Temp\Export.csv -Encoding "Unicode" -Delimiter ";"

PsIsContainer 개체를 사용할 수 있습니다.

Get-ChildItem -path C:\mypath -Recurse | where {$_.PsIsContainer -eq $true} 

에 구체적으로(「」를 사용해 주세요).IO.FileAttributes

Get-ChildItem c:\mypath -Recurse | Where-Object {$_.Attributes -band [IO.FileAttributes]::Directory}

하지만 난 마렉의 해결책이 더 좋아

Where-Object { $_ -is [System.IO.DirectoryInfo] }

언급URL : https://stackoverflow.com/questions/3085295/how-do-i-get-only-directories-using-get-childitem

반응형