여러 개의 OLD 파일이 포함 된 디렉토리 트리에서 어떻게 파일 목록을 얻을 수 있습니까?PowerShell을 사용하여 특정 나이의 OLD 하위 디렉토리에만 파일 찾기
특정 나이가있는 OLD
디렉토리의 파일 만보고 싶습니다.
여러 개의 OLD 파일이 포함 된 디렉토리 트리에서 어떻게 파일 목록을 얻을 수 있습니까?PowerShell을 사용하여 특정 나이의 OLD 하위 디렉토리에만 파일 찾기
특정 나이가있는 OLD
디렉토리의 파일 만보고 싶습니다.
글쎄, 첫 번째 부분은 모든 파일을 나열하고, 두 번째 부분은 파일을 필터링하고, 마지막으로 출력 형식을 지정하는 것입니다. 당신은 Format-List 또는 테이블을 사용할 수 있습니다 (하지만 난 그것을 테스트하기 위해 인근 PowerShell을 설치하지 않아도 :]) 당신이 그것을 매개 변수로 특정 날짜를 줄 때
$yourDate = Get-Date 5/1/2006
ls -recurse . | ? { $_.fullname -match "OLD" -and $_.lastwritetime -lt $yourDate } | % { $_.fullname }
Get-Date는 날짜 - 시간 객체를 생성합니다. 그냥 사용하고 필터하십시오.
나는이 질문을 이해하고 있으므로 Raoul Supercopter's solution은 대답하지 않습니다. "OLD"라는 디렉터리에서 모든 파일을 찾는 대신 위의 솔루션은 이름에 "OLD"가 포함 된 모든 파일을 찾습니다.
대신, OLD라는 디렉토리에있는 특정 날짜보다 오래된 모든 파일을 찾는 것이 좋습니다.
그래서, 디렉토리를 찾기 위해, 우리는 같은 것을 필요로하는 다음
dir -r | ? {$_.name -match "\bold\b" -and $_.PSIsContainer}
하지만 다음 반복적으로 잠재적으로 모든 디렉토리의 이름, 각각의 디렉토리를 통해 이동하고 파일을 찾을 (수 뭔가가 필요 " OLD "라는 다른 디렉토리에 들어있는).
이 작업을 수행하는 가장 쉬운 방법은 함수를 작성하고 재귀 적으로 호출하는 것입니다, 그러나 여기 그래서 이것은 딱 맞는 다른 전술 (줄 연속 문자를주의 소요 한 줄에 그것을 할 수있는 방법이있다 :
dir -r | ? {!$_.PSIsContainer -and $_.LastWriteTime -lt (Get-Date 5/1/2006)} `
| ? {(% {$_.directoryname} | split-path -leaf) -eq "OLD"}
그럼, 첫 번째 섹션은. 다음 섹션을 확인하면 파일 (!$_.PSIsContainer
)에서 찾고 있는지 확인하기 위해 목록 단지 기본 재귀 디렉토리입니다
? 여기 무슨 일이 일어나고 그것은 당신의 나이 요구 사항을 충족하는지 Get-Date 섹션의 괄호를 사용하면 명령을 실행 한 결과를 볼 수 있습니다. 각 파일의 디렉토리 이름을 얻고 split-path cmdlet을 사용하여 가장 가까운 디렉토리의 이름 만 가져옵니다. "OLD"인 경우 요구 사항에 맞는 파일이 있습니다.
거기서 사용 된 정규 표현식은 디렉터리 이름에'old'가 개별 단어 (일종의)로 나타나야한다는 것을 알아 두십시오. 이것은 OP를 통해 어느 곳에서나 잘릴 수 없었으며 잘못되었을 수도 있습니다. 또한 날짜 비교를위한'Get-Date' cmdlet을 삭제할 수 있습니다. '$ _. LastWriteTime -lt '2006-05-01'같은 것은 올바른 피연산자가 적절하게 캐스팅되기 때문에 잘 동작합니다. – Joey
Get-Date가 필요 없다는 좋은 점. 감사. –
멋진 답변, explanaition에도 감사드립니다! – PS1
당신이 어떤 대답이라도 훌륭하다고 생각한다면, 투표 할 수 있습니다 :) 그리고 그들 중 일부가 당신의 질문에 대답한다면, 그것을 받아들이는 것이 좋습니다. – stej