Mac OS X 10.7 Lion에서 "날짜 추가"메타 데이터를 설정하는 방법


22

Mac OS X 10.7 Lion의 Finder는 항목이 폴더에 추가 된 날짜를 추적하는 새로운 파일 메타 데이터 "날짜 추가"를 보여줍니다. 10.7로 업그레이드 한 후 내 ~/Downloads폴더 의 어떤 항목에도 "날짜 추가"값이 없습니다. "날짜 수정"값과 일치하도록 빈 "날짜 추가"값을 모두 설정하고 싶지만 "날짜 추가"속성을 특정 값으로 설정하는 방법을 알 수 없습니다.

내 첫 번째 추측은 이것이었다 :

xattr -w com.apple.metadata:kMDItemDateAdded "2012-02-19 16:34:47 +0000" myfile

그러나 그것은 작동하지 않는 것 같습니다 (오류를보고하지는 않지만).


결국 해결책을 찾았습니까?
erotsppa

1
허용 된 답변은 내가 시도했을 때 효과가있었습니다.
존 시라쿠사

답변:


7

여기 새로운 접근 방식이 있습니다. 주의 : Lion (시스템에 Lion이 설치된 컴퓨터)으로 업그레이드 된 시스템이 없으므로 테스트 할 수 없습니다. 테스트되지 않은 코드; 이 코드를 시도하기 전에 백업하십시오!

이전 답변은 Dock의 다운로드 스택에서 사용되는 정렬 순서를 기반으로했습니다. Finder의 Date Added 필드는 Spotlight 정보를 기반으로하는 것으로 보이며, 이는 해킹하기 어렵습니다. AppleScript를 통해서도 접근 할 수 없습니다. 그러나 해결 방법이있는 것 같습니다.

  1. Automator에서 새 워크 플로우를 작성하십시오.

  2. "Finder 항목 요청"조치를 추가하여 Finder에서 파일 또는 폴더를 허용하도록 워크 플로우를 설정하십시오.

  3. “AppleScript 실행”액션을 추가하여 워크 플로우가 AppleScript를 실행하게하십시오.

이 AppleScript를 사용하십시오.

on run {input, parameters}
    do shell script "sudo /usr/sbin/systemsetup -setusingnetworktime Off" with administrator privileges
    tell application "Finder"
        repeat with x in input
            set myfile to POSIX path of x
            set nm to name of x
            set d to modification date of x
            set yr to (character 3 of (year of d as string)) & (character 4 of (year of d as string))
            set mth to (month of d as number) as string
            if length of mth is 1 then set mth to "0" & mth
            set dy to day of d as string
            if length of dy is 1 then set dy to "0" & dy
            set h to hours of d as string
            if length of h is 1 then set h to "0" & h
            set m to minutes of d as string
            if length of m is 1 then set m to "0" & m
            set s to seconds of d as string
            if length of s is 1 then set s to "0" & s
            set dt to mth & ":" & dy & ":" & yr as string
            set tm to h & ":" & m & ":" & s as string
            do shell script "sudo /usr/sbin/systemsetup -setdate '" & dt & "'" with administrator privileges
            do shell script "sudo /usr/sbin/systemsetup -settime '" & tm & "'" with administrator privileges
            do shell script "mv \"" & myfile & "\" /var/tmp/clobber"
            do shell script "mv /var/tmp/clobber \"" & myfile & "\""
        end repeat
    end tell
    do shell script "sudo /usr/sbin/systemsetup -setusingnetworktime On" with administrator privileges
    return input
end run

추가 된 날짜가없는 파일을 선택하고 (Finder에서 추가 된 날짜별로 정렬 한 다음 추가 된 날짜가없는 목록의 일부를 선택)이 서비스를 실행하십시오.

Automator의 워크 플로우 스크린 샷


2
그것은 끔찍하다. .. 좋은 방법으로, 아마?
John Siracusa 2012

1
글쎄, 그것은 확실히 해킹입니다. 그러나 메타 데이터의 특정 부분은 Spotlight에서 계산되며로 알려진 어두운 미스터리를 해킹하지 않으면 /.Spotlight-V100얻을 수있는만큼 좋을 수 있습니다. 그러나 나는 것 좋아 깨끗한 대답을 참조하십시오.
다니엘

이 스크립트에서 이상한 오류가 발생합니까? sh : -c line 0 : 일치하는` "를 찾는 동안 예기치 않은 EOF
erotsppa

@erotsppa 지금 수정하고 업데이트해야합니다.
다니엘

AppleScript $는 이름 이있는 파일을 처리 할 때 오류가 발생하여 중지 되었지만 파일 이름을 일시적으로 바꾸어 문제를 해결했습니다. AppleScript로는 파일을 처리하려면 내 검색은 대체 할 수 있음을 나타냅니다 myfile으로 quoted form of myfile,하지만 난 것을 테스트하지 않았습니다. 그것을 시도한 경우 myfile변수를 설정 하고 이름을 바꿀 때 인용을하는 것이 더 명확 할 수 있습니다 quotedFilePath.
Rory O'Kane

7

xattr -l다운로드 폴더의 항목을 실행하면 다음과 같은 필드가 나타납니다.

com.apple.metadata:kMDItemDownloadedDate:
00000000  62 70 6C 69 73 74 30 30 A1 01 33 41 B4 83 4D BF  |bplist00..3A..M.|
00000010  4C 4F E3 08 0A 00 00 00 00 00 00 01 01 00 00 00  |LO..............|
00000020  00 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00  |................|
00000030  00 00 00 00 13                                   |.....|
00000035

이진 plist입니다. HexFiend를 사용하여 해당 바이트가있는 파일을 만들면 (예, 수동으로 입력했습니다. 매거진에서 어셈블러 코드를 내 Apple에 입력하는 것과 같이 과거에서 폭발] [GS), .plist 파일로 저장하면 열었습니다. TextWrangler의 파일에 컴파일되지 않은 다음 xml이 있습니다.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
    <date>2011-11-28T05:03:59Z</date>
</array>
</plist>

즉, 애플은 날짜를 컴파일 된 XML로 저장하는 것처럼 보이지만 일반 텍스트는 작동하는 것으로 보입니다.

즉, 파일의 수정 된 날짜를 문자열 형식으로 얻을 수있는 경우 명령 xattr -w com.apple.metadata:kMDItemDownloadedDate "2012-02-19 16:34:47 +0000" file을 실행 하여 "다운로드 한 날짜"를 변경할 수 있습니다. 실제 다운로드 한 날짜가 아니라 실제로 정렬 된 필드 인 것처럼 보입니다.

제 (사용되지 않는) 추가 할 때 마지막으로 당신은 오류 없어 kMDItemDateAdded때문에 내가 배운대로 필드에 이 문서 , xattr즐겁게 사용 또는 사용하지 않은, 당신이 원하는 메타 데이터 필드 설정합니다.

이것이 답의 핵심입니다. AppleScript를 작성하여 각 파일의 수정 날짜를 가져 kMDItemDownloadedDate오고 설정되어 있는지 확인하고 설정되어 있지 않은 경우 kMDItemDownloadedDate를 수정 날짜로 설정하지만 답변의 핵심을 게시하고 싶습니다.


1
Downloads 폴더의 파일에서 mdls를 실행하면 kMDItemDateAdded 값이 표시됩니다. Finder의 목록보기에서 "날짜 추가됨"열이 표시됩니다.
존 시라쿠사

또한 HexFiend 및 TextWrangler를 거치지 않고 kMDItemDownloadedDate를 plist 정보로 표시하려면을 시도하십시오 xattr -p com.apple.metadata:kMDItemDownloadedDate FILENAME_HERE | xxd -r -p | plutil -convert xml1 - -o -. xxd는 이진 plist 데이터 plutil로 변환 한 다음 XML plist로 변환하여 인쇄합니다.
매트 깁슨

좋아, 나는 내 머리 위에있다. 나는 말하기를 두려워한다. kMDItemDateAdded는에 나열되지 않으며 kMDItemDownloadedDate는에 나열 xattr -l되지 않습니다 mdls. 호기심과 호기심. 추가 된 날짜 필드도 디렉토리 의 xattr에 저장되지 않습니다 . 이 메타 데이터는 어디에 있습니까?
다니엘

1
xattr파이썬 스크립트 이기 때문에이 스크립트에서 찔러서 16 진수가 아닌 2 진수로 속성의 이진 데이터를 얻는 방법을 알아낼 수 있어야 plutil합니다. 그래서 직접 피드 할 수 있습니다 .
Harald Hanche-Olsen

4

Finder에 표시된 "날짜 추가"를 설정하는 방법을 찾을 수 없습니다.

Spotlight 인덱스의 kMDItemDateAdded메타 데이터 속성 에서 검색된 것이 맞습니다 . 그러나 Spotlight는 어떤 식 으로든이를 파생시키는 것으로 보입니다.

I라는 확장 된 파일 속성 설정을 시도했습니다 com.apple.metadata:kMDItemDateAdded형식에 의해 사용되는 등 여러 가지 형식 중 하나로 날짜 값에, kMDItemDateAdded그리고 그들 중 누구도 스포트라이트 인덱스에 의해 포착되지 않았다을, 즉 어떤 값으로 표시 무슨 상관 xattr값 로 표시 mdls되지 않았습니다.

나는 것 같아요 내가 확실히 알고하지 않습니다하지만 스포트라이트는 단순히 처음으로 색인을 특정 위치에 파일을 기반으로이 날짜를 설정하고, 그것을 생성하기 위해 다른 메타 데이터를 확인하지 않습니다,. 당신이 만약 mv다운로드 아웃하고 다시 파일, 그것은 다시 이동했지만, 아무도 경우에 날짜 추가 업데이트 파일의 메타 데이터는 영향을받지 것 같다 만 스포트라이트 메타 데이터.

요약하면, Date Added는 /.Spotlight-V100의 다소 비밀스러운 곳에 저장되어 있으며 누군가 메타 데이터 항목을 임의의 값으로 업데이트하도록 Spotlight에 지시하는 방법이 없다면 이 작업을 수행하는 방법을 참조하십시오.


스포트라이트! 잘 했어.
다니엘

4

솔루션에 대한 Daniel Lawson에게 감사합니다! 2 년이 지난 후에도 여전히 잘 작동합니다.

두 가지 추가 사항이 있습니다.

1) 허용되는 답변의 코드에 작은 오류가 있습니다.

이 줄 :

do shell script "/usr/sbin/systemsetup -settime ''" & tm & "'"

... 추가 어포 스트로피가있어 "예기치 않은 EOF"오류가 발생합니다. 읽어야합니다.

do shell script "/usr/sbin/systemsetup -settime '" & tm & "'"

2) 더 중요한 것은 Mavericks 10.9.2부터 systemsetup에는 관리자 권한이 필요합니다. 따라서 쉘 스크립트를 호출 할 때마다 다음 공식을 따라야합니다.

do shell script "sudo /usr/sbin/systemsetup -setusingnetworktime Off" with administrator privileges

다음은 10.9.3에서 작동하는 것으로 확인 된 AppleScript의 전체 수정 버전입니다.

on run {input, parameters}
    do shell script "sudo /usr/sbin/systemsetup -setusingnetworktime Off" with administrator privileges

    tell application "Finder"
        repeat with x in input
            set myfile to POSIX path of x
            set nm to name of x

            set d to modification date of x
            set yr to (character 3 of (year of d as string)) & (character 4 of (year of d as string))
            set mth to (month of d as number) as string
            if length of mth is 1 then set mth to "0" & mth
            set dy to day of d as string
            if length of dy is 1 then set dy to "0" & dy
            set h to hours of d as string
            if length of h is 1 then set h to "0" & h
            set m to minutes of d as string
            if length of m is 1 then set m to "0" & m
            set s to seconds of d as string
            if length of s is 1 then set s to "0" & s

            set dt to mth & ":" & dy & ":" & yr as string
            set tm to h & ":" & m & ":" & s as string
            do shell script "sudo /usr/sbin/systemsetup -setdate '" & dt & "'" with administrator privileges
            do shell script "sudo /usr/sbin/systemsetup -settime '" & tm & "'" with administrator privileges

            do shell script "mv \"" & myfile & "\" /var/tmp/clobber"
            do shell script "mv /var/tmp/clobber \"" & myfile & "\""
        end repeat
    end tell

    do shell script "sudo /usr/sbin/systemsetup -setusingnetworktime On" with administrator privileges

    return input
end run

1
다른 질문에 오신 것을 환영합니다! 대신 편집 누군가 다른 사람의 답변에 대한 답변을 작성하는, 단순히 클릭 편집 또는 이 응답 향상 버튼을 사용하면 개선하고자하는 포스트 아래를 .
grg

Daniel의 답변 은 이러한 변경 사항을 포함 하도록 편집되었습니다 .
Rory O'Kane
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.