7

Я пытаюсь использовать Apple Automator для обозначения пустых папок в иерархии. По сути, я начинаю проект с иерархии пустых папок и заполняю их во время работы. Я хочу, чтобы рабочий процесс маркировал все пустые папки (серые), которые не содержат файлов, а их потомки также не содержат файлов.

Другими словами, когда я создаю пустой проект, все папки должны быть серыми, так как нигде нет "файлов", только пустые папки. Однако, как только я помещаю файл куда-нибудь, он становится родительским, и все его дедушка и бабушка больше не будут помечены серым цветом.

Мне показалось, что я нашел то, что мне было нужно, Как изменить внешний вид пустых папок в Finder? однако это маркировка пустых папок. В моем проекте только последние потомки будут серыми, потому что все родительские папки содержат папки, поэтому не пустые.

Вот код, который я запускаю в сценарии оболочки /bin /bash в Automator:

find "$@" -type d -empty

А потом я передаю его в "Элементы поиска меток", чтобы результаты стали серыми.

Вот результат, который я получаю при запуске в тестовой папке:

  • Тестовая папка (не серая)
    • Папка первая (серая)
    • Папка вторая (не серая)
      • Папка А (серая)
    • Папка Три (не серая)
      • Test.txt
    • Папка четвертая (не серая)
      • Папка А (не серая)
        • Test.txt

И вот результат, который я ищу:

  • Тестовая папка (не серая)
    • Папка первая (серая)
    • Папка вторая (серая)
      • Папка А (серая)
    • Папка Три (не серая)
      • Test.txt
    • Папка четвертая (не серая)
      • Папка А (не серая)
        • Test.txt

Любая помощь будет оценена!

О, также я верю, что могу запустить рабочий процесс из Хейзел. Если у вас есть лучший способ, чтобы он иногда запускался автоматически, я бы тоже хотел это знать.

Благодарю.

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

1 ответ1

3

Я пробовал несколько случаев, и, кажется, работает так, как вам нужно:

Сценарий оболочки, usr/bin/perl , передает входные данные в as arguments .

автосервис

use File::Find;

find({ wanted => \&find_files, no_chdir => 1 }, @ARGV);

sub find_files
{
    if (-f $_)
    {
        ($file) = $_ =~ /.*\/(.*)$/;
        push (@all_files, $_) if ($file ne ".DS_Store");
    }
    else
    {
        push (@all_folders, $_);
    }
}

sub osascript($) { system 'osascript', map { ('-e', $_) } split(/\r/, $_[0]); } 

foreach(@all_files)
{
    @paths = split(/\//, $_);
    for $i (0..$#paths-1)
    {
        if ($i == 0)
        {
            $x = "$paths[$i]";
        }
        else
        {
            $x = "$last[$i-1]/$paths[$i]";
        }
        push(@last, $x);
        $temp{$x} ++;
    }
    @last = ();
 }

@not_gray_folders = keys %temp;
foreach(@all_folders)
{
    $folder = $_; $flag = 0;
    foreach(@not_gray_folders)
    {
        if ($folder eq $_)
        {
            $flag = 1;
        }
    }
    if (!$flag)
    {
        $label = 7;
    }
    else
    {
        $label = 0;
    }
    &osascript ("tell application \"Finder\" to set label index of alias POSIX file \"$folder\" to $label");
}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .