programing

PowerShell에서 특정 확장자를 가진 파일을 재귀적으로 검색하는 방법은 무엇입니까?

lastmoon 2023. 7. 31. 21:49
반응형

PowerShell에서 특정 확장자를 가진 파일을 재귀적으로 검색하는 방법은 무엇입니까?

특정 폴더의 경우 확장자가 있는 모든 파일을 나열해야 합니다..js모든 수준의 하위 폴더에 중첩된 경우에도 마찬가지입니다.

출력 콘솔의 결과는 다른 응용 프로그램에 쉽게 복사하여 붙여넣을 수 있도록 확장자가 없는 파일 이름의 목록이어야 합니다.

지금은 이것을 시도하고 있지만 출력 콘솔에서 간단한 목록이 아닌 여러 메타 정보를 얻습니다.

Get-ChildItem -Path C:\xx\x-Recurse -File | sort length –Descending

저에게 힌트를 좀 주실 수 있나요?

길이를 기준으로 정렬할 필요가 없는 경우 다음을 사용할 수 있습니다.-Name 변수개를 가질 Get-ChildItem 만반다음사용한환을 합니다.[System.IO.Path]::GetFileNameWithoutExtension()경로 및 확장을 제거하려면:

Get-ChildItem -Path .\ -Filter *.js -Recurse -File -Name| ForEach-Object {
    [System.IO.Path]::GetFileNameWithoutExtension($_)
}

길이별 정렬을 원하는 경우 다음을 삭제합니다.-Name를 합니다.BaseName 각의재의 FileInfo물건.(두 예제 모두에서) 출력을 파이프로 연결할 수 있습니다.clip클립보드에 복사하기

Get-ChildItem -Path .\ -Filter *.js -Recurse -File| Sort-Object Length -Descending | ForEach-Object {
    $_.BaseName
} | clip

확경장없경원하대우체는로를전체이자ute▁if▁substit체$_.BaseName매개 변수:

$_.FullName.Remove($_.FullName.Length - $_.Extension.Length)

간단한 옵션은 다음을 사용하는 것입니다..NameFileInfo파이프라인에서 항목을 선택한 다음 확장을 제거합니다.

Get-ChildItem -Path "C:\code\" -Filter *.js -r | % { $_.Name.Replace( ".js","") }

파일을 필터링하는 방법에는 와일드카드를 사용하는 방법과 정규식(규칙)을 사용하는 방법의 두 가지가 있습니다.

경고:글로빙 방식은 일치하지 않아야 하는 파일과도 일치한다는 단점이 있습니다.*.jsx.

# globbing with Wildcard filter 
# the error action prevents the output of errors
# (ie. directory requires admin rights and is inaccessible)
Get-ChildItem -Recurse -Filter '*.js' -ErrorAction 'SilentlyContinue' 

# filter by Regex
Where-Object { $_.Name -Match '.*\.js$' }

그런 다음 필요에 따라 이름 또는 파일 크기별로 정렬할 수 있습니다.

# sort the output 
Sort-Object -PropertyName 'Length'

간단한 경로 및 파일 이름 목록 형식 지정:

# format output
Format-List -Property ('Path','Name')

파일 확장명을 제거하려면 선택을 사용하여 결과를 매핑할 수 있습니다.

Select-Item { $_.Name.Replace( ".js", "") }

전체적으로 볼 때 스크립트에서 사용하지 않는 매우 짧은 버전도 있습니다. 읽기 어렵기 때문입니다.

ls -r | ? { $_.Name -matches '.*\.js' } | sort Length | % { $_.Name.Replace( ".js", "") | fl

간결함을 원하는 경우 ForEach-Object와 따옴표를 제거할 수 있습니다.-Path할 수 .

(Get-ChildItem -Filter *.js -Recurse).BaseName | Sort length -Descending

위의 답변은 정상적으로 작동합니다.그러나 윈도우에는 ls라는 별칭이 리눅스와 동일하기 때문에 작동하는 또 다른 더 짧은 명령은 다음과 같습니다.ls -Filter *.exe

파일 확장명이 없는 파일 이름에는 기본 이름을 사용합니다.

Get-ChildItem -Path ".\*.js" | Sort-Object Length -Descending | ForEach-Object {
    $_.BaseName  
}

저는 예전에 항상 이것을 위해 cygwin을 사용했습니다.제 마지막 고용주가 우리의 환경을 봉쇄했고 그것은 이용할 수 없었습니다.저는 제가 자주 수정한 최신 파일을 검토하는 것을 좋아합니다.스크립트를 저장하기 위해 LatestCode라는 환경변수를 만들었습니다.그런 다음 iex $env:latest code로 실행합니다.

여기 스크립트가 있습니다. get-child item ". -recurse - include *.ts, *.html, *.sass, *.js, *.css | 여기서 -object {$.mode -notmatch "d"} | 마지막 쓰기 시간 정렬 | 내림차순 | 선택 -객체 -첫 번째 25 | 형식 테이블 마지막 쓰기 시간, 전체 이름 -autosize

언급URL : https://stackoverflow.com/questions/31049454/how-to-retrieve-recursively-any-files-with-a-specific-extensions-in-powershell

반응형