Automator - usuwanie plików ze zmodyfikowaną datą starszą niż 30 dni, z wyjątkiem sytuacji, gdy folder jest oznaczony kolorem czerwonym

1

Próbuję zrobić zdarzenie kalendarza automatora, gdzie w każdy piątek usuwa pliki, których data modyfikacji jest starsza niż 30 dni; ZWOLNIJ pliki w folderach oznaczonych kolorem czerwonym.

Mam swój folder Dokumenty z 3 plikami, jeden folder utworzony dzisiaj i oznaczony na czerwono, folder ostatnio zmodyfikowany tydzień temu oraz plik PDF, który został zmodyfikowany ponad 30 dni temu.

Mój skrypt automatyzacji wygląda następująco:

[Find Finder Items] Wyszukaj "Dokumenty", WSZYSTKIE poniższe są prawdziwe:

-Date last modified is not in the last 30 days
-Label is not red

[Przenieś przedmioty do śmieci do kosza]

//koniec

Ale przenosi to folder z czerwoną etykietą i starszy plik pdf, kiedy powinien tylko przenieść plik PDF do kosza.

Czy ktoś może mi pomóc? Dziękuję Ci!

Edycja: Uruchomienie macOS 10.13.3

dariasx1
źródło
Uruchamianie macOS 10.13.3
dariasx1
Czy możesz spróbować użyć Uruchom AppleScript zamiast tego akcja, z następującym kodem: tell application "Finder" to get every file in the (path to documents folder) whose modification date > ((current date) - 30 * days) and label index is not 2. Jeśli to działa zgodnie z oczekiwaniami, możesz zamienić get dla delete.
CJK
Próbowałem tego w edytorze skryptów i nie działało, próbowałem na końcu "spróbować" i "zakończyć próbę", ale i tak nie zadziałało. czy robię coś źle?
dariasx1
Kiedy powiedziałeś "Z WYJĄTKIEM pliki w folderach oznaczonych na czerwono." jest tylko folder oznaczony na czerwono lub czy pliki są również oznaczone kolorem czerwonym?
user3439894
Tylko folder jest oznaczony na czerwono.
dariasx1

Odpowiedzi:

1

Moja pierwsza sugestia dotycząca problemu polegała na zastąpieniu działań, które obecnie posiadasz Automator przepływ pracy z Uruchom AppleScript akcja, która używa tego polecenia:

    tell application "Finder" to get every item ¬
        in the (path to documents folder) ¬
            whose modification date < ((current date) - 30 * days) ¬
            and label index is not 2

Następnie musisz dodać akcję, aby wyrzucić te elementy lub zmienić get every item do delete every item w skrypcie. Jednak jako @ user3439894 zauważyłem, że nie będzie to przechodzić przez drzewa folderów, więc wszelkie elementy w folderze starszym niż 30 dni (i bez oznaczenia na czerwono) nie zostaną wykryte.

Poniższy skrypt jest przykładem metody, która używa rekurencji do przechodzenia przez drzewo katalogów usuwających pliki (lub oznaczając je do usunięcia) w trakcie:

    property D : {}  # The files to delete
    property R : path to documents folder  # The root of the directory tree structure
    property age : 30 * days
    property red : 2


    descend into R

    # tell application "Finder" to delete D
    return D


    to descend into here
        local here

        tell application "Finder"

            # Mark files which are older than 30 days for deletion
            # EXCEPT any that are tagged red
            set end of D to every file in here whose label index is not red ¬
                and modification date < (current date) - age

            # This checks to see if, following the purge, the 
            # current folder will become empty.  If so, it can 
            # be deleted too.  It adds to processing time, so
            # remove this code block if you don't need it.
            count the last item of D
            if the result is equal to (count the files in here as alias list) ¬
                and (count the folders in here) is 0 then
                set the end of D to here
                return
            end if

            # This ensures folders tagged red and their contents
            # are spared from the purge
            get the folders in here whose label index is not 2

            repeat with F in the result
                set F to the contents of F  # de-referencing

                descend of me into F
            end repeat

        end tell
    end descend

Przetestowałem to krótko na mojej dość złożonej strukturze drzewa i okazało się, że działa z powodzeniem. Jednak piszę to i testuję, będąc dość zmęczonym, ale niezależnie od tego, zawsze radziłbym przetestować ten skrypt sam na fałszywych plikach i folderach, aby upewnić się, że działa. Prosimy o raportowanie, jak to działa, łącznie z ewentualnymi błędami, z określonymi szczegółami, w jaki sposób mogę samodzielnie odtworzyć błąd.

CJK
źródło
@ Dariasx1 Jak sobie z tym poradziłeś?
CJK