programing

PowerShell을 사용하여 정규식과 일치하는 폴더의 파일을 삭제하려면 어떻게 해야 합니까?

easyjava 2023. 9. 6. 23:05
반응형

PowerShell을 사용하여 정규식과 일치하는 폴더의 파일을 삭제하려면 어떻게 해야 합니까?

Windows(윈도우) 컴퓨터에서 원하지 않는 여러 파일의 파일 이름에 대한 공통적인 특성을 알고 있습니다.정규 표현식 PowerShell 명령 하나로 주어진 폴더 또는 폴더 계층 구조에서 이 모든 파일을 제거하려면 어떻게 해야 합니까?

Get-ChildItem 명령을 RegEx 패턴을 받아들이는 Where-Object 필터를 통해 파이프링한 다음 Remove-Item으로 파이프링할 수 있습니다.그러면 Select-String을 사용하는 것보다 더 빠르고 좋은 결과를 얻을 수 있을 것 같습니다.다음과 같은 명령을 사용합니다.

Get-ChildItem $Path | Where{$_.Name -Match "<RegEx Pattern>"} | Remove-Item

Name 특성은 파일의 확장자와 함께 파일 또는 폴더의 이름만 일치합니다.그것은 길을 따라가는 다른 것들과 일치하지 않을 것입니다.이렇게 하면 파이프 아래로 FileInfo 개체가 전달되며, Remove-Item은 이 개체를 파이프 입력으로 사용하여 문제의 파일을 제거합니다.

경로의 하위 폴더를 포함하려면 Get-ChildItem 명령에 -Recurse 스위치를 추가하면 다음과 같습니다.

Get-ChildItem $Path -Recurse | Where{$_.Name -Match "<RegEx Pattern>"} | Remove-Item

파일만 삭제하려면 FileInfo 개체의 PSIsContainer 속성을 보고 개체 앞에 다음과 같은 느낌표를 붙여 반전시켜 Where 문에 지정할 수 있습니다.

Get-ChildItem $Path -Recurse | Where{$_.Name -Match "<RegEx Pattern>" -and !$_.PSIsContainer} | Remove-Item

명령어를 사용하면 됩니다

ls -name | select-string -pattern ".*\(\d+\).*" | %{rm $_}

따옴표의 내용이 당신의 정규 표현인 곳입니다.이 예제의 regex는 파일 이름에 (#)이 있는 파일을 검색합니다. 여기서 #는 음이 아닌 정수입니다.이것은 음악 관리자가 동일한 파일 집합을 여러 번 덤프한 폴더에서 중복 파일을 삭제할 때 유용합니다.

-name 뒤에 -r을 추가하는 경우

ls -name -r | select-string -pattern ".*\(\d+\).*" | %{rm $_}

하위 폴더를 통해 반복되며 모든 하위 폴더에서 일치하는 파일을 삭제합니다.

명령의 구조는 다음과 같습니다.

  • ls는 powershell 명령 get-child 항목의 별칭입니다.현재 폴더의 모든 요소가 나열됩니다.-name 인수는 이름만 생성하도록 지정하고 파일 크기와 같은 다른 정보는 원하지 않습니다.
  • select-string은 대부분 UNIX grep과 동일하며 패턴(regex)을 줄로 구분된 문자열 다발과 일치시킵니다.-pattern 매개 변수는 cmdlet이 regex를 갖도록 설정합니다.
  • %{rm$}은(는) 루프에 대한 값입니다. "(경우 선택 문자열에서) 나에게 연결된 각 행에 대해" 다음 작업을 수행합니다. 여기서 $는 주어진 행입니다.이 경우 항목을 rming하고 있습니다. 여기서 rm은 Remove-Item의 별칭입니다.

전 이걸 사용합니다.

(Get-ChildItem -Path $Path | Select -ExpandProperty Fullname) -match <regex> | Remove-Item
(Get-ChildItem -Path $Path -Recurse | Select -ExpandProperty Fullname) -match <regex> | Remove-Item

또는 V3 이상을 사용하여 자동 멤버 열거 기능이 있는 경우:

 (Get-ChildItem -Path $Path).Fullname -match <regex> | Remove-Item
 (Get-ChildItem -Path $Path -Recurse).Fullname -match <regex> | Remove-Item

이름은 현재 작업 디렉토리가 파일을 삭제할 디렉토리이고 모든 파일이 해당 디렉토리에 있는 경우에만 작동합니다(반복하면 이름은 같지만 경로가 다른 파일을 두 개 이상 찾을 수 있음).

언급URL : https://stackoverflow.com/questions/23767489/how-can-one-delete-files-in-a-folder-matching-a-regular-expression-using-powersh

반응형