2013-12-18 3 views
0

osx 10.6.7 이상에 대한 솔루션이 필요합니다. 디스크에서 "오래된"파일을 검색하는 문제를 해결하려고합니다. 오래된 파일 나는 일찍 1 년 동안 파일을 의미합니다. 나는 자 NSPredicate 만든하지만 NSMetadataQuery이 kMDItemAccessedDates하는 대신 NSMetadataQuery를 사용하여 오래된 파일 찾기

NSPredicate * fileTypePredicate = [NSPredicate predicateWithFormat: @"file_type == \"audio\""]; 
NSPredicate * accessDatePredicate = [NSPredicate predicateWithFormat: @"%K <= %@", @"kMDItemAccessedDates", timeYearBefore]; 
return [NSCompoundPredicate andPredicateWithSubpredicates: @[fileTypePredicate, accessDatePredicate]]; 

아무것도

을 반환하지 않습니다 또한 나는 acess_date을 사용하지만 성공하지.

답변

0

처음에는 "file_type"이 지원되는 메타 데이터 속성이 될 것으로 예상됩니다.

항목의 콘텐츠 유형에는 두 가지 속성이 있습니다. 하나는 kMDItemContentType이며 항목 내용의 직접 유형입니다 (일반적으로 파일 이름 확장자로 결정됨). 다른 하나는 kMDItemContentTypeTree이며,이 유형의 배열과 해당 조상의 모든 배열입니다.

오디오 파일을 찾으려면 kMDItemContentTypeTreekUTTypeAudio 인 항목을 찾고 싶습니다. (예, 배열에 타입이 있는지 여부를 테스트하고 싶지만 평등 테스트가 작동합니다.) 터미널에서 시도하십시오.

코드에서 두 개의 매개 변수 형식 문자열을 사용해야합니다. 두 번째 술어와 같지만 연산자로 ==을 사용하십시오. @"%K == %@" 매개 변수의 경우 kMDItemContentTypeTree (키)과 kUTTypeAudio (이 경우 값, 찾고있는 내용 유형)을 전달하십시오.


는 두 번째에 관해서는, 나는 exactly one other Stack Overflow question 다른 kMDItemAccessedDates 어느 곳의 어떤 언급을 찾을 수 없습니다. 나는 그 질문의 저자가 자신의 맞춤 스포트라이트 수입업자를 위해 열쇠를 만들었을 것이라고 생각한다. 당신은 주식 OS X 시스템에서 그것을 기대할 수 없습니다.

대신 kMDItemLastUsedDate을 시도해보십시오. (@"…"- 문자열의 리터럴로 쓰지 마십시오. 주위에 따옴표 나 앞에 @가 붙지 말고 kMDItemLastUsedDate입니다.

+0

고맙습니다. 나는 문제를 미루는 것을 연기 할 필요가 있었다. 지난번부터 kMDItemLastUsedDate도 시도했습니다. 예상 된 kMDItemLastUsedDate로서 kMDItemLastUsedDate가 (2014-02-24 10:24:32) 파일의 mdls 명령의 결과를 사용했습니다. 그 경우 술어는 http://pastebin.com/PtCkPHdP이었고 결과는 0 개였습니다 : (아이디어가 있습니까?) – toohtik

+0

@toohtik : 날짜 객체가 'date'가 아닌지 확인 하시겠습니까? –

+0

예 I 확실 해요 .NSPredicate 인쇄 후 : kMDItemLastUsedDate == CAST (414931838.000000, "NSDate") 또한 정확한 mdls 출력 날짜를 사용했습니다. 내 자유 시간을 확인하는 경우 http : //를 참조하십시오. cl.ly/1I2C253U230b 내 osx 10.9. 고마워요! – toohtik

관련 문제