Finder w Mac OS X 10.7 Lion pokazuje nowy fragment metadanych pliku „Data dodania”, który śledzi datę dodania elementu do folderu. Po uaktualnieniu do wersji 10.7 żaden element w moim ~/Downloads
folderze nie ma wartości „Data dodania”. Chciałbym ustawić wszystkie puste wartości „Data dodania”, aby pasowały do wartości „Data modyfikacji”, ale nie mogę ustalić, jak ustawić atrybut „Data dodania” na określoną wartość.
Moje pierwsze przypuszczenie było następujące:
xattr -w com.apple.metadata:kMDItemDateAdded "2012-02-19 16:34:47 +0000" myfile
Ale to nie wydaje się działać (choć nie zgłasza też błędu).
Odpowiedzi:
OK, nowe podejście tutaj. Przestroga: Nie mam uaktualnienia systemu do Lion (mój komputer został dostarczony z zainstalowanym Lion), więc nie mogę tego przetestować. Nieprzetestowany kod; wykonaj kopię zapasową przed wypróbowaniem tego kodu!
Moja poprzednia odpowiedź była oparta na kolejności sortowania stosowanej przez stos Pobrane w Docku. Wydaje się, że pole Data dodania w Finderze opiera się na informacjach w centrum uwagi, które trudno jest zhakować. Nie jest również dostępny za pośrednictwem AppleScript. Ale wydaje się, że istnieje obejście tego problemu.
Utwórz nowy przepływ pracy w Automatorze.
Ustaw przepływ pracy, aby akceptować pliki lub foldery z Findera, dodając akcję „Zapytaj o elementy Findera”.
Poproś, aby przepływ pracy uruchomił AppleScript, dodając akcję „Uruchom AppleScript”.
Użyj tego AppleScript:
Wybierz pliki, które nie mają jeszcze daty dodania (sortuj według daty dodania w Finderze, a następnie wybierz część listy bez daty dodania) i uruchom tę usługę.
źródło
/.Spotlight-V100
, może być tak dobry, jak to tylko możliwe. Ale ja kocham zobaczyć czystą odpowiedź.$
w nazwie, ale obejrzałem go, tymczasowo zmieniając nazwę tego pliku. Aby AppleScript obsługiwać takie pliki, moje pytania wskazują, że można zastąpićmyfile
zquoted form of myfile
, ale nie testowałem tego. Jeśli ktoś spróbuje tego, łatwiejsze będzie cytowanie przy ustawianiumyfile
i zmianie nazwy zmiennej naquotedFilePath
.Kiedy uruchamiam
xattr -l
elementy w folderze Pobrane, otrzymuję pole, które wygląda mniej więcej tak:To jest plista binarna. Kiedy używam HexFiend do tworzenia pliku z tymi bajtami (tak, ręcznie je wprowadziłem; wybuch z przeszłości, jak wprowadzanie kodu asemblera z magazynu do mojego Apple] [GS), a następnie zapisz go jako plik .plist, otworzyłem plik w TextWrangler i otrzymałem następujący nieskompilowany plik XML:
To powiedziawszy, podczas gdy Apple wydaje się przechowywać daty w skompilowanym XML, zwykły tekst wydaje się działać.
Innymi słowy, jeśli możesz uzyskać datę modyfikacji pliku w postaci ciągu, możesz uruchomić polecenie
xattr -w com.apple.metadata:kMDItemDownloadedDate "2012-02-19 16:34:47 +0000" file
zmiany „daty pobrania”, która wydaje się być polem faktycznie posortowanym, a nie faktyczną datą dodania.W końcu nie wystąpił błąd podczas dodawania (nieużywanego)
kMDItemDateAdded
pola, ponieważ, jak dowiedziałem się w tym artykule ,xattr
z przyjemnością ustawię dowolne pole metadanych, które chcesz, będzie używane lub nieużywane.To jest sedno odpowiedzi. Będę pracować nad napisaniem AppleScript, aby uzyskać zmodyfikowaną datę dla każdego pliku, sprawdź, czy
kMDItemDownloadedDate
jest ustawiony, a jeśli nie, ustaw kMDItemDownloadedDate na zmodyfikowaną datę, ale chciałem opublikować rdzeń odpowiedzi.źródło
xattr -p com.apple.metadata:kMDItemDownloadedDate FILENAME_HERE | xxd -r -p | plutil -convert xml1 - -o -
. Nawróceni xxd do binarnych danych plist, potemplutil
konwertuje do plist XML i drukuje to.xattr -l
, a kMDItemDownloadedDate nie ma na liściemdls
. Curiouser i curiouser. Również pole Data dodania nie jest przechowywane w xattr dla katalogu . Gdzie żyją te metadane?xattr
jest to skrypt Pythona, myślę, że powinna istnieć możliwość przejrzenia tego skryptu i wymyślenia, w jaki sposób uzyskać dane binarne atrybutu w postaci binarnej, a nie szesnastkowej, aby można było je natychmiast karmićplutil
.Nie mogę znaleźć sposobu, aby ustawić „Data dodania” wyświetlaną w Finderze.
Wierzę, że jesteś prawdą, że jest to pobierane z indeksu Spotlight za
kMDItemDateAdded
atrybut metadanych. Jednak wydaje się, że Spotlight w jakiś sposób czerpie to z siebie.Próbowałem skonfigurować rozszerzony atrybut pliku wywoływany
com.apple.metadata:kMDItemDateAdded
do wartości daty w jednym z kilku różnych formatów, w tym w formacie używanym przezkMDItemDateAdded
i żaden z nich nie został wykryty przez indeks Spotlight, tj. Bez względu na wartość pokazywaną przezxattr
wartość pokazane przezmdls
nie zostało zmienione.Chciałbym odgadnąć , choć nie wiem na pewno, że Spotlight prostu ustawia tę datę w oparciu o raz pierwszy spis plik w określonej lokalizacji, a nie sprawdza żadnych innych metadanych w celu jej wytworzenia. Jeśli masz
mv
plik z Pobranych i włączyłeś go ponownie, data dodania aktualizuje się, kiedy został ponownie przeniesiony, ale wydaje się, że nie dotyczy to żadnych metadanych pliku , tylko metadane Spotlight.Podsumowując, uważam, że Data Dodania jest przechowywana tylko gdzieś w dość tajemniczych wnętrznościach /.Spotlight-V100, i chyba że ktoś może wymyślić sposób, aby Spotlight zaktualizował wpis metadanych do dowolnej wartości, mogę „ widzę sposób na zrobienie tego.
źródło
Dzięki Daniel Lawson za rozwiązanie! Nadal działa dobrze, nawet dwa lata później.
Mam dwa dodatki:
1) Pamiętaj, że w kodzie zaakceptowanej odpowiedzi jest mały błąd.
Ta linia:
... ma dodatkową apostrofę, co powoduje błąd „nieoczekiwany EOF”. Powinien brzmieć:
2) Co ważniejsze, począwszy od Mavericks 10.9.2, systemsetup wymaga uprawnień administratora. Dlatego każde wywołanie skryptu powłoki powinno być zgodne z następującą formułą:
Oto pełna zmodyfikowana wersja AppleScript, potwierdzona do pracy w 10.9.3:
źródło