Mac OS X 10.7 Lion'da “tarih eklendi” meta verileri nasıl ayarlanır


22

Mac OS X 10.7'deki Finder Lion, bir öğenin bir klasöre eklendiği tarihi izleyen yeni bir dosya meta verisi olan "Date Eklendi" öğesini gösterir. 10.7'ye yükselttikten sonra, ~/Downloadsklasörümdeki hiçbir öğenin "Eklenme Tarihi" değerleri yok. Tüm boş "Eklenen Tarihler" değerlerini "Tarih Değiştirme Tarihi" değerleriyle eşleşecek şekilde ayarlamak istiyorum, ancak "Eklenen Tarihler" özniteliğinin belirli bir değere nasıl ayarlanacağını çözemiyorum.

İlk tahminim şuydu:

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

Ancak bu işe yaramadı (bir hatayı da rapor etmese de).


Bir çözüm buldun mu?
erotsppa

1
Kabul edilen cevap, denediğimde çalıştı (olduğu kadar çılgın).
John Siracusa,

Yanıtlar:


7

Tamam, yeni yaklaşım burada. Dikkat: Lion'a yükseltilmiş bir sistemim yok (bilgisayarım Lion yüklü olarak geldi), bu yüzden bunu test edemiyorum. Denenmemiş kod; Bu kodu denemeden önce yedekleyin!

Önceki cevabım Dock'ta İndirilenler yığını tarafından kullanılan sıralama düzenine dayanıyordu. Finder'daki Tarih Eklendi alanı, kesilmesi zor olan Spotlight bilgilerine göre görünüyor. Ayrıca AppleScript ile erişilemez. Ancak, bir geçici çözüm var gibi görünüyor.

  1. Automator'da yeni bir İş Akışı oluşturun.

  2. İş akışını, “Bulucu öğeleri için sor” işlemini ekleyerek Finder'dan dosya veya klasörleri kabul edecek şekilde ayarlayın.

  3. “AppleScript Çalıştır” eylemini ekleyerek iş akışının bir AppleScript çalıştırmasını sağlayın.

Bu AppleScript'i kullanın:

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

Henüz Eklenmiş bir Tarihi olmayan dosyaları seçin (Finder'daki Eklenmiş Tarihe Göre Sıralayın, ardından listenin bir Eklenmiş Tarihi olan kısmını seçin) ve bu hizmeti çalıştırın.

Automator'daki iş akışının ekran görüntüsü


2
Bu korkunç… iyi bir şekilde, belki?
John Siracusa,

1
Bu kesinlikle bir kesmek. Ancak, belli bir meta veri parçasının Spotlight'tan hesaplandığı ve olduğu gibi bilinen karanlık gizemi hacklemeden göründüğü anlaşılmaktadır /.Spotlight-V100. Ama ediyorum seviyorum temiz bir cevap görmek için.
Daniel

Bu senaryodan garip bir hata alıyorum? sh: -c satır 0: beklenmedik EOF `"
erotsppa

@erotsppa şimdi düzeltilmeli ve güncellenmelidir.
Daniel

AppleScript $, adına sahip olan bir dosyayı işlerken bir hatayla durdu , ancak geçici olarak bu dosyayı yeniden adlandırarak bunun üzerinde çalıştım. AppleScript tür dosyaları işlemek yapmak için, benim aramalar yerini alabilir belirten myfileile quoted form of myfile, ama bu test etmedim. Biri denerse myfile, değişkeni ayarlarken ve yeniden adlandırırken alıntı yapmak daha açık olabilir quotedFilePath.
Rory O'Kane,

7

xattr -lYüklemeler klasörümdeki öğeleri çalıştırdığımda şuna benzeyen bir alan alıyorum:

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

Bu bir ikili durumdur. Bu baytları içeren bir dosya oluşturmak için HexFiend kullandığımda (evet, el ile girdim; geçmişten bir dergi içinden Apple'ımdan [dergi] derleme kodunu girme gibi gelip] .plist dosyasını kaydettim. TextWrangler içindeki dosya ve aşağıdaki derlenmemiş xml dosyasını aldım:

<?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>

Bununla birlikte, Apple tarihleri ​​derlenmiş XML'de saklıyor gibi gözükse de, düz metin çalışıyor gibi görünüyor.

Başka bir deyişle, dosyanın değiştirilmiş tarihini dize biçiminde alabilirsiniz, xattr -w com.apple.metadata:kMDItemDownloadedDate "2012-02-19 16:34:47 +0000" filegerçekte Eklenmiş değil, gerçekte sıralanan alan olarak görünen "indirilen tarihi" değiştirmek için komutu çalıştırabilirsiniz .

Sonunda, (kullanılmayan) kMDItemDateAddedalanı eklerken hiçbir hata alamazsınız, çünkü bu makalede öğrendiğim gibi , xattristediğiniz, kullanılan veya kullanılmayan meta veri alanını mutlu bir şekilde ayarlar.

Cevabın özü bu. Her dosyanın değiştirilme tarihini almak için bir AppleScript yazmaya çalışacağım kMDItemDownloadedDate, ayarlanıp ayarlanmadığını kontrol edip ayarlamamış olup olmadığımı kontrol etmek için kMDItemDownloadedDate öğesini değiştirilen tarihe ayarladım, ancak cevabın çekirdeğini almak istedim.


1
İndirilenler klasöründeki dosyalarda mdls komutunu çalıştırdığınızda kMDItemDate Added değerlerini göreceksiniz. Bu, Bulucu Listesi görünümündeki "Eklenen Tarih" sütununun gösterdiği şeydir.
John Siracusa,

Bu arada, kMDItemDownloadedDate ürününü HexFiend ve TextWrangler üzerinden geçmeden plist bilgileri olarak göstermek istiyorsanız, deneyin xattr -p com.apple.metadata:kMDItemDownloadedDate FILENAME_HERE | xxd -r -p | plutil -convert xml1 - -o -. Xxd ikili düzlem verisine, sonra plutilXML düzlemine dönüştürür ve onu yazdırır.
Matt Gibson

Tamam, kafamın üzerindeyim, söylemekten korkuyorum. kMDItemDate Katma listelenmemiş xattr -lve kMDItemDownloadedDate listelenmemiş mdls. Meraklı ve meraklı. Dizin için bir xattr dosyasında saklanan Tarih Eklenen alanı da değil . Bu meta veriler nerede yaşıyor?
Daniel

1
Yana xattrbir piton script, ben size onu directy besleyebilir böylece yerine onaltılık yerine, ikili olarak öz nitelik ikili veri almak nasıl bu yazısı ve şekil burnunuzu sokacak mümkün olmalıdır tahmin plutil.
Harald Hanche-Olsen

4

Finder'da gösterilen "Tarih Eklendi" ayarını yapmanın bir yolunu bulamıyorum.

Spotlight endeksinin kMDItemDateAddedmeta veri özniteliğinden alındığını doğru olduğuna inanıyorum . Ancak, Spotlight bunu bir şekilde türetmiş görünüyor.

Aradım genişletilmiş dosya özniteliği kurma denedim com.apple.metadata:kMDItemDateAddedbiçimi tarafından kullanılan dahil olmak üzere birçok farklı biçimlerden birinde bir tarih değerine, kMDItemDateAddedve bunların hiçbiri Spotlight indeksi tarafından kaldırdı, yani hiçbir değer gösterdiği ne olursa olsun xattr, değer tarafından gösterilen mdlsdeğişiklik olmadı.

Eminim bilmesem de , Spotlight'ın bu tarihi belirli bir konumdaki bir dosyayı ilk kez endekslemesine bağlı olarak ayarladığını ve oluşturmak için başka bir meta veriyi kontrol etmediğini tahmin ediyorum. mvYüklemelerden çıkıp tekrar girerseniz , Eklenen Tarih, taşındığı zaman güncellenir, ancak dosya meta verilerinden hiçbiri etkilenmez, yalnızca Spotlight meta verileri görünür.

Bu yüzden, özet olarak, Tarih Eklendi'nin sadece /.Spotlight-V100'ün kriptik bağırsaklarında bir yerde saklandığını ve birinin Spotlight'ı keyfi bir değere meta veri girdisini güncellemesini söyleme yöntemini bulamadığı sürece yapabilirim. Bunu yapmanın bir yolunu görmüyorum.


Gündem! Aferin.
Daniel

4

Çözüm için Daniel Lawson'a teşekkürler! İki yıl sonra bile, hala iyi çalışıyor.

İki ekim var:

1) Lütfen kabul edilen cevap kodunda küçük bir hata olduğunu unutmayın.

Bu hat:

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

... "beklenmedik EOF" hatasını tetikleyen fazladan bir kesme işareti var. Okumalı:

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

2) Daha önemlisi, Mavericks 10.9.2 ile başlayarak, sistem kurulumu yönetici haklarını gerektirir. Bu yüzden her kabuk betiğine yapılan çağrı şu formülü izlemelidir:

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

İşte 10.9.3'te çalışması onaylanan AppleScript'in tam değiştirilmiş sürümü:

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
Farklı sormaya hoş geldiniz! Başkasının cevabını düzenlemek için bir cevap yazmak yerine, geliştirmek istediğiniz yayının altındaki bu yanıtı düzenle veya geliştir düğmesini tıklamanız yeterlidir .
grg

Daniel'in cevabı vardır düzenlendi bu değişiklikleri içerecek şekilde.
Rory O'Kane
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.