Automator - удаление файлов с датой, измененной старше 30 дней, за исключением случаев, когда в папке помечено красным


1

Я пытаюсь сделать событие календаря automator, где каждую пятницу он удаляет файлы, дата изменения которых старше 30 дней; За исключением файлов в папках, помеченных красным.

У меня есть папка «Документы» с 3 файлами, одна папка создана сегодня и помечена красным, папка была изменена в последний раз неделю назад, и PDF, который был изменен более 30 дней назад.

Мой скрипт-автоматизатор выглядит следующим образом:

[Найти элементы поиска] Поиск «Документы», ВСЕ из следующего верно:

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

[Переместить элементы Finder в корзину]

//конец

Но это перемещает папку с красной пометкой и старый PDF, когда он должен только переместить PDF в корзину.

Может кто-нибудь мне помочь? Спасибо!

Изменить: Запуск MacOS 10.13.3


Запуск macOS 10.13.3
dariasx1

Вы можете попробовать использовать Run AppleScript действие вместо этого, с помощью следующего кода: 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. Если это работает , как ожидалось, вы можете обменять getна delete.
CJK

Я попробовал это в Script Editor, и это не сработало, я попытался поместить «try» и «end try» в конец, но это все равно не сработало. Я делаю что-то неправильно?
dariasx1

Когда вы сказали: «КРОМЕ файлов внутри папок, помеченных красным». помечена только красная папка или файлы помечены красным?
user3439894

Только папка помечена красным.
dariasx1

Ответы:


1

Мое первоначальное предложение по этой проблеме состояло в том, чтобы заменить действия, которые вы в данный момент выполняете в рабочем процессе Automator, действием Run AppleScript , использующим эту команду:

    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

После этого вы либо добавили бы действие для удаления этих элементов, либо изменили get every itemбы его delete every itemв сценарии. Однако, как указал @ user3439894 , это не будет проходить по деревьям папок, поэтому любые элементы внутри папки, которые старше 30 дней (и не помечены красным), не будут обнаружены.

Следующий скрипт представляет собой пример метода, который использует рекурсию для спуска по дереву каталогов, удаляя файлы (или помечая их для удаления), по мере продвижения:

    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

Я кратко проверил его на моей довольно сложной древовидной структуре, и оказалось, что она успешно работает. Тем не менее, я пишу это и тестирую, хотя и устала, но, тем не менее, я всегда настоятельно советую вам проверить этот скрипт самостоятельно на фиктивных файлах и папках, чтобы убедиться, что он работает. Пожалуйста, сообщите о том, как это происходит, включая - если они возникнут - любые ошибки, с конкретными подробностями о том, как я могу воспроизвести ошибку самостоятельно.


@ dariasx1 Как ты справился с этим?
CJK
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.