programing

패턴과 일치하는 폴더에 파일 이름 나열(파일 내용 제외)

itmemos 2023. 7. 31. 21:06
반응형

패턴과 일치하는 폴더에 파일 이름 나열(파일 내용 제외)

하여 다을사다음포함폴모는나다열이 .$pattern

Get-ChildItem $targetDir -recurse | Select-String -pattern "$pattern" | group path | select name

둘 다 에 하만두파모보있것입다니처는럼두지일이록개목의▁the▁having▁files가 있는 것 같습니다.$pattern 이름과 내용, 예를 들어 위의 내용을 실행할 때$pattern="SAMPLE"이해합니다.

C:\tmp\config.include
C:\tmp\README.md
C:\tmp\specs\SAMPLE.data.nuspec
C:\tmp\specs\SAMPLE.Connection.nuspec

이제:

C:\tmp\config.include
C:\tmp\README.md

실제로 SAMPLE 키워드/텍스트가 포함되어 있지만 저는 상관하지 않습니다. 패턴과 일치하는 내용으로 파일이 아닌 파일 이름을 나열하는 명령만 있으면 됩니다.제가 무엇을 빠뜨리고 있나요?

아래의 답변을 바탕으로 시도해 보았습니다.

$targetDir="C:\tmp\"
Get-ChildItem $targetDir -recurse | where {$_.name -like "SAMPLE"} | group path | select name

그리고:

$targetDir="C:\tmp\"
Get-ChildItem $targetDir -recurse | where {$_.name -like "SAMPLE"} | select name

결과를 반환하지 않습니다.

Select-String 당신이 시키는 대로 하고 있습니다.강조해주세요.

Select-String cmdlet은 입력 문자열 및 파일에서 텍스트 및 텍스트 패턴을 검색합니다.

따라서 파일 이름과 일치시키려면 다음을 사용하십시오.-FilterGet-ChildItem또는 사후 처리를 사용합니다.Where-Object

Get-ChildItem -Path $path -Recurse -Filter "*sample*"

그러면 이름에 샘플이 있는 모든 파일폴더가 반환됩니다.파일이나 디렉터리만 원한다면 스위치를 사용할 수 있습니다.-File또는-Directory특정 개체 유형을 반환합니다.

의 패턴이 더하다면, 은 패단순단다더복사할면수있다습니도용야해다잡하턴어보이한▁need다▁is▁if니있▁to를 사용해야 할 수도 있습니다.Where-Object간지든의 대답처럼 말입니다.-match정규식에 액세스할 수 있습니다.


모든 경로가 고유한 단일 파일을 반환하므로 코드의 그룹화 논리는 중복되어야 합니다.그러므로 저는 그것을 여기에 포함시키지 않았습니다.만약 당신이 단지 경로를 원한다면, 당신은 파이프를 연결할 수 있습니다.Select-Object -Expand FullName아니면 그냥(Get-ChildItem -Path $path -Recurse -Filter "*sample*").Fullname

get-ChildItem $targetDir -recurse | where {$_.name -like $pattern} | select name

Matt의 유용한 답변을 보완하기 위해:

특히, 당신이 연결하고 있는 것은 물체이기 때문에 - 그것은 무엇입니까?Get-ChildItem출력 - 문자열아니라 이러한 개체로 표시되는 파일의 내용을 검색합니다.

각 파일 경로의 파일 이름 부분만 일치해야 하고 패턴이 와일드카드 식으로 표현될 수 있다고 가정할 때, 필요하지 않습니다.Select-String를 사용할 수도 있고 대신 사할수있다니습용▁use를 사용할 도 있습니다.Get-ChildItem와 함께-Filter 더 한 매트대답럼처, 느지만리더, 강한력약간의또는▁as▁more▁powerful.-Include.

주의사항:

  • Select-String -Pattern정규식을 사용할 수 있습니다(예:.*sample.* 보다Get-Help about_Regular_Expressions),

  • 에 반에면.Get-ChildItem -Filter/-Include와일드카드 표현식을 사용할 수 있습니다(예:*sample* 보다Get-Help about_Wildcards) - 그들은 다른 것들입니다.

참고 사항:만약 당신의 의도가 오직 파일들과 일치하는 것이라면, 당신은 말할 수 있습니다.Get-ChildItem출력을 파일로 제한합니다(잠재적으로 디렉터리도 아닌).-File (으)로 디렉토리 출력을 할 수 .)-Directory).


Group-Object path(group path) 의도한 대로 작동하지 않을 것입니다, 왜냐하면.Path 일정개 속의성에서 하는 일치 Select-String전체 파일 이름을 포함하므로 각 파일을 고유한 그룹(기본적으로 no-op)에 넣습니다.

사용시만 할 때Get-ChildItem은 동한속이다같습니다과음름은성등▁be입니다..FullName하지만 부모 경로(포함된 디렉터리의 경로)를 기준으로 그룹화하는 것이 좋습니다..DirectoryName), 따라서 다음과 같이 추정합니다.

... | Group-Object DirectoryName | Select-Object Name

일치하는 파일 이름을 가진 하나 이상의 파일을 포함하는 디렉토리의 전체 경로를 출력합니다.
:NameSelect-Object Name을 ..Name반환된 그룹 개체의 속성Group-Object▁value의 값이 ..DirectoryName입력 개체의 속성입니다.).

@mklement0의 우수한 답변을 보완하기 위해 Powershell에 다음과 같이 파이프를 추가하여 전체 경로를 인쇄하도록 요청할 수 있습니다.

Get-ChildItem -Recurse -ErrorAction SilentlyContinue -Force -Filter "*sample*" | %{$_.FullName}

참고: 보안에 따라 오류가 발생할 수 있는 폴더를 검색할 때는 SilentContinue 옵션을 사용합니다.

나는 @Ichydon의 답을 검토했습니다.

하지만 '좋아요' $196의 사용을 따를 수 없었습니다.

파일 이름에 32자(문자와 숫자)의 파일을 나열하려고 했습니다.

PSC:>Get-ChildItem C:\Users\ -Recurse | where {$_.name -match "[a-zA-Z0-9]{32}"} | select name

또는

PSC:>Get-ChildItem C:\Users\010M\Documents\WindowsPowerShell -Recurse | Where-Object {$_.name -match "[A-Z0-9]{32}"} | select name

따라서 이 경우에는 어디에 개체를 사용하든 어디에 개체를 사용하든 상관 없습니다.

select-string을 직접 사용하여 특정 문자열과 일치하는 파일을 검색할 수 있습니다. 예, 이렇게 하면 파일 이름:count:content...가 반환됩니다.등, 그러나 내부적으로는 선택하거나 생략할 수 있는 이름이 있습니다. 이 파이프를 출력에서 "파일 이름"을 선택하는 "select-object"로 연결하려면 "파일 이름"이 필요합니다.

모두 선택하려면 *."Subject:" 패턴이 있는 MSG 파일.웹 서비스가 다시 시작되었습니다."에서 다음을 수행할 수 있습니다.

Select-String -Path .*를 선택합니다.MSG - 패턴 '제목:웹 서비스 다시 시작됨' -List | select-object Filename

또한 이러한 파일을 즉시 제거하려면 RM 명령을 사용하여 ForEach 문에 다음과 같이 연결할 수 있습니다.

Select-String -Path .*를 선택합니다.MSG - 패턴 '제목:웹 서비스 다시 시작됨' - 목록 | select-object Filename | 각 {rm$.파일 이름 }

언급URL : https://stackoverflow.com/questions/44825746/list-file-names-in-a-folder-matching-a-pattern-excluding-file-content

반응형