2010-04-21 4 views

답변

1

글쎄, 첫 번째 부분은 모든 파일을 나열하고, 두 번째 부분은 파일을 필터링하고, 마지막으로 출력 형식을 지정하는 것입니다. 당신은 Format-List 또는 테이블을 사용할 수 있습니다 (하지만 난 그것을 테스트하기 위해 인근 PowerShell을 설치하지 않아도 :]) 당신이 그것을 매개 변수로 특정 날짜를 줄 때

$yourDate = Get-Date 5/1/2006 
ls -recurse . | ? { $_.fullname -match "OLD" -and $_.lastwritetime -lt $yourDate } | % { $_.fullname } 

Get-Date는 날짜 - 시간 객체를 생성합니다. 그냥 사용하고 필터하십시오.

+0

멋진 답변, explanaition에도 감사드립니다! – PS1

+0

당신이 어떤 대답이라도 훌륭하다고 생각한다면, 투표 할 수 있습니다 :) 그리고 그들 중 일부가 당신의 질문에 대답한다면, 그것을 받아들이는 것이 좋습니다. – stej

3

나는이 질문을 이해하고 있으므로 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"인 경우 요구 사항에 맞는 파일이 있습니다.

+0

거기서 사용 된 정규 표현식은 디렉터리 이름에'old'가 개별 단어 (일종의)로 나타나야한다는 것을 알아 두십시오. 이것은 OP를 통해 어느 곳에서나 잘릴 수 없었으며 잘못되었을 수도 있습니다. 또한 날짜 비교를위한'Get-Date' cmdlet을 삭제할 수 있습니다. '$ _. LastWriteTime -lt '2006-05-01'같은 것은 올바른 피연산자가 적절하게 캐스팅되기 때문에 잘 동작합니다. – Joey

+0

Get-Date가 필요 없다는 좋은 점. 감사. –

관련 문제