Moja biblioteka zdjęć ewoluowała przez wiele lat, początkowo jako biblioteka iPhoto, następnie połączona z biblioteką Aperture, a następnie stała się biblioteką zdjęć. W ciągu ostatnich 20 lat zgromadziłem tysiące słów kluczowych, które nie zawierają żadnych zdjęć.
Sama aplikacja Zdjęcia nie obsługuje funkcji „Usuń nieużywane słowa kluczowe”. Spojrzałem na to, aby to zrobić za pomocą AppleScript, ale pomimo tego, że jestem dość doświadczonym programistą, nie potrafiłem tego zrobić (AppleScript doprowadza mnie do szału. szczerze).
Mam nadzieję, że ktoś już napisał taki skrypt, a jeśli nie, to jakieś narzędzie, które zrobi to za mnie.
applescript
photos.app
Dave Sag
źródło
źródło
Odpowiedzi:
Poniżej znajduje się skrypt, który napisałem i przetestowałem przez kilka dni. Chociaż Photos.app firmy Apple jest skryptowalny, już zauważyłeś, że brakuje w nim niezbędnych metod usuwania nieużywanych słów kluczowych. Jeśli znasz AppleScript i pojęcie skryptów interfejsu użytkownika, wydaje się, że jest to jedyna dostępna opcja.
Uwaga: Aby skrypty interfejsu użytkownika działały, musisz zapewnić niezbędne uprawnienia dostępu do edytora skryptów .
Mój osobisty pogląd na skrypty interfejsu użytkownika jest ogólnie negatywny, ale dołożyłem wszelkich starań, aby złagodzić typową temperamentalną naturę i kruchość skryptów interfejsu użytkownika, i wykonałem kilka testów w moim systemie, aby zaobserwować dość płynne działanie.
Jednak jedną szczególną funkcją, której nie mogłem (nie chciałem) sprawdzić podczas testowania, jest to, jak działa skrypt, gdy istnieją tysiące słów kluczowych i / lub bardzo duża biblioteka Zdjęć . Sam mam bibliotekę zdjęć składającą się z mniej niż 100 zdjęć i żadne z nich nie było oznaczone słowami kluczowymi, dlatego stworzyłem próbkę 20, z których losowo przypisałem około połowy z nich.
Teoretycznie jedynym czynnikiem wpływającym na wielkość biblioteki lub liczbę słów kluczowych na działanie skryptu jest czas wykonywania. Jednak w AppleScript mogą wystąpić problemy z przekroczeniem limitu czasu, które przedwcześnie przerywają skrypt; a w przypadku skryptów interfejsu użytkownika prawdopodobieństwo zgłoszenia błędu zwykle wzrasta wraz z czasem działania.
Szczegółowe uwagi dotyczące tych niepewności dotyczących wydajności znajdują się poniżej skryptu. Jeśli napotkasz jakiekolwiek problemy, zgłoś to, a ja rozważę, jak wdrożyć poprawkę. Nie powinno być żadnych negatywnych skutków, gdyby skrypt nie działał idealnie (tzn. Nie stracisz żadnych zdjęć). Nieoptymalna wydajność powinna jedynie doprowadzić do niepełnego oczyszczenia słów kluczowych.
Niepewności dotyczące zagrożeń dla wydajności
Jeśli chodzi o ilość zdjęć w bibliotece , najbardziej pamiętam o następującej linii:
których efekt wejdzie w grę w punktach skryptu, w których właściwość jest wyłuskiwana, tj
Funkcja tego wiersza polega na pobraniu listy wszystkich słów kluczowych aktualnie przypisanych do co najmniej jednego zdjęcia. W tym celu należy wyliczyć (pobrać) każde zdjęcie w bibliotece i
keywords
ocenić jego właściwość. Dzieje się to praktycznie natychmiast na początku skryptu; i ponownie po usunięciu słów kluczowych w celu ustalenia, czy czyszczenie zostało zakończone. Jest to proces czasochłonny, a zatem potencjalne zagrożenie przekroczeniem limitu czasu przez skrypt.Powinno być możliwe przedłużenie domyślnej wartości limitu czasu w następujący sposób: z limitem 600 sekund ustaw wartość activeKe words na listę bieżących limitów czasu zakończenia
lub może być konieczna nieznaczna zmiana składni przy pobieraniu zdjęć, tak aby skrypt bezpośrednio celował w aplikację Zdjęcia w punkcie wyliczenia, zamiast poprzez odwołania do właściwości; a następnie ująć polecenie Zdjęcia w
timeout
bloku. Ale na razie zostawiłem to, aby sprawdzić, czy skrypt będzie działał w twoim systemie z domyślnym limitem czasu, co może nie być ograniczeniem, jeśli wyliczenie odbywa się synchronicznie (i nie wiem, czy to robi) .Jeśli chodzi o potencjalne blokady skryptów interfejsu użytkownika: słownik AppleScript ze zdjęciami nie zapewnia sposobu na odzyskanie wszystkich słów kluczowych istniejących w aplikacji. Sposób działania tego skryptu polega na otwarciu Menedżera słów kluczowych i odczytaniu nazwy każdej etykiety słowa kluczowego wykrytej w sekcji
"Keywords"
. Nie wiem, czy każdy element interfejsu użytkownika zawierający etykietę słowa kluczowego jest ładowany podczas tworzenia okna Menedżera słów kluczowych ; lub czy zostaną one załadowane fragmentarycznie, gdy użytkownik przewinie listę. Ta ostatnia sytuacja byłaby uciążliwa, ponieważ spowodowałaby niepełną listę słów kluczowych, a następnie niepełne oczyszczenie.Jednym oczywistym rozwiązaniem byłoby uruchomienie skryptu wiele razy, aby wykonać wiele czystek, dopóki nie pozostaną żadne usuwalne elementy.
Biorąc pod uwagę najgorszy scenariusz , analiza skryptu wydaje się mieć jeden z trzech możliwych wyników (niezależnie od tego, jak skrypt się zakończy, czy to przez zakończenie jego uruchomienia, czy przez zgłoszenie błędu):
Wydaje się, że nie ma sposobu na awarię skryptu w sposób, który negatywnie wpłynie na bibliotekę Zdjęć , więc najgorszym scenariuszem wydaje się być zero . Jeśli jednak założymy, że mogę się mylić, możesz zaryzykować błąd w potencjalnym gorszym scenariuszu.
Ten margines zależy od ciebie i twojego osądu, co jest trudne do ustalenia, gdy być może nie wiesz, o jakich typach rzeczy zwykle się mylę. Jeśli to pomoże, powiedziałbym, że etykieta nie może usunąć żadnego z twoich zdjęć, ponieważ nie wykonuje żadnych operacji na systemie plików. Jeśli niemożliwe nie jest wystarczające, wyraźnym środkiem ostrożności jest wcześniejsze wykonanie kopii zapasowej całej biblioteki zdjęć . W zależności od wielkości twojej biblioteki, może to wahać się od prostego do nakładania bólu ze względu na niemal zerową szansę.
Oczywiście skrypt wykonuje (oczywiście) czytanie i edycję list słów kluczowych. Więc chociaż nie powinno to być możliwe, nie byłoby głupotą uważać, że wszystkie słowa kluczowe dla wszystkich zdjęć mogą po prostu zniknąć. Jeśli chcesz zabezpieczyć się przed tym mało prawdopodobnym wydarzeniem, zapewniam ten „skryptlet”, który możesz uruchomić wcześniej, aby utworzyć kopię zapasową słów kluczowych:
Podczas tworzenia kopii zapasowej słów kluczowych skrypt będzie musiał wyliczyć całą bibliotekę Zdjęć . Dlatego bez względu na to, czy potrzebujesz kopii zapasowej, najpierw uruchom ten skrypt, aby wskazać, jak wolno / szybko można odczytać bibliotekę.
źródło
error "Internal table overflow." number -2707
godzinie(makeJSONString of me to fp given data:it)
. Myślę, że ma to związek z faktem, że mam setki słów kluczowych i ponad 50 000 zdjęć."Internal table overflow."
błąd przy próbie konwersji na ciąg JSON. Jednak z tą samą kolekcją został przekonwertowany na listę właściwości i zapisany do pliku pomyślnie. Byłbym wdzięczny za wypróbowanie nowego skryptu kopii zapasowej i zgłoszenie się.restoreKeywordsFromFile
. Dlatego najprostszą metodą może być utworzenie kopii zapasowej słów kluczowych; ręcznie usuń wszystkie słowa kluczowe z Photos.app ; następnie przywróć słowa kluczowe z pliku kopii zapasowej.