Я пытаюсь использовать Apple Automator для маркировки пустых папок в иерархии. По сути, я начинаю проект с иерархии пустых папок и заполняю их по мере работы. Я хочу, чтобы рабочий процесс маркировал все пустые папки (серые), которые не содержат файлов, и их потомки также не содержат файлов.
Другими словами, когда я создаю пустой проект, все папки должны быть серыми, так как нигде нет "файлов", только пустые папки. Однако, как только я помещаю файл куда-то, его родитель и все его прародители больше не будут помечены серым.
Я думал, что нашел то, что мне нужно, наКак изменить внешний вид пустых папок в Finder?Однако он помечает пустые папки. В моем проекте только последние потомки будут серыми, потому что все родительские папки содержат папки, следовательно, не пустые.
Вот код, который я запускаю в скрипте оболочки /bin/bash в Automator:
find "$@" -type d -empty
А затем я передаю его в «Элементы поиска меток», чтобы сделать результаты серыми.
Вот результат, который я получаю при запуске в тестовой папке:
- Тестовая папка (не серая)
- Папка первая (серая)
- Папка Два (не серая)
- Папка А (серая)
- Папка три (не серая)
- Тест.txt
- Папка Четыре (не серая)
- Папка А (не серая)
- Тест.txt
- Папка А (не серая)
И вот какой результат я ищу:
- Тестовая папка (не серая)
- Папка первая (серая)
- Папка Два (серая)
- Папка А (серая)
- Папка три (не серая)
- Тест.txt
- Папка Четыре (не серая)
- Папка А (не серая)
- Тест.txt
- Папка А (не серая)
Любая помощь будет оценена!
О, и еще, я думаю, что могу запустить рабочий процесс из Hazel. Если у вас есть лучший способ, чтобы он запускался автоматически время от времени, я бы тоже хотел это узнать.
Спасибо.
Редактировать: Только что понял, что файлы .ds_store (я предполагаю) приводят к тому, что папки также не выглядят пустыми, если, например, я удаляю последний файл в папке.
решение1
Я попробовал несколько вариантов, и, похоже, все работает так, как вам нужно:
Скрипт оболочки 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");
}