[powershell] Get-ChildItem을 사용하여 디렉토리 만 가져 오려면 어떻게합니까?

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

Get-ChildItem c:\mypath -Recurse

$_.Attributes속성을 얻기 위해 사용하려고 시도했지만 System.IO.FileAttributes비교할 리터럴 인스턴스를 구성하는 방법을 모르겠습니다 . 에서에게 cmd.exe이 될 것이다

dir /b /ad /s



답변

PowerShell 버전이 3.0 미만인 경우 :

FileInfo의해 반환 된 객체 Get-ChildItem에는 “base”속성이 PSIsContainer있습니다. 해당 항목 만 선택하려고합니다.

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

디렉토리의 원시 문자열 이름을 원하면 할 수 있습니다

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

PowerShell 3.0 이상 :

dir -Directory


답변

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://docs.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"}