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)
간단한 옵션은 다음을 사용하는 것입니다..Name
의 FileInfo
파이프라인에서 항목을 선택한 다음 확장을 제거합니다.
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
'programing' 카테고리의 다른 글
PSObject 개체의 새 복제 인스턴스를 생성하는 방법 (0) | 2023.07.31 |
---|---|
Restful API 서비스 (0) | 2023.07.31 |
치명적 오류: 선택적 값의 래핑을 해제하는 동안 예기치 않게 0이(가) 발견되었습니다. (0) | 2023.07.31 |
PL/SQL BEGIN을 중첩해야 하는 시기...END 블록? (0) | 2023.07.31 |
모든 호출을 수정하지 않고 Retrofit을 사용하여 OAuth 토큰 새로 고침 (0) | 2023.07.31 |