如何使用 Automator 在 finder 中更改空文件夹的外观?

Gar*_*ary 7 finder bash shell-script automator macos

我正在尝试使用 Apple Automator 在层次结构中标记空文件夹。基本上,我从一个带有空文件夹层次结构的项目开始,并在工作时填充它们。我想要一个工作流来标记所有不包含文件且其后代也不包含文件的空文件夹(灰色)。

换句话说,当我创建空项目时,所有文件夹都应该是灰色的,因为任何地方都没有“文件”,只有空文件夹。但是,一旦我将文件放在某处,它的父文件和所有祖父母文件将不再被标记为灰色。

我以为我在如何更改 finder 中空文件夹的外观中找到了我需要的东西但是,它正在标记空文件夹。在我的项目中,只有最后一个后代才会是灰色的,因为所有父文件夹都包含文件夹,因此,不是空的。

这是我在 Automator 的 /bin/bash shell 脚本中运行的代码:

find "$@" -type d -empty
Run Code Online (Sandbox Code Playgroud)

然后我将它传递给“标签查找器项目”以将结果变为灰色。

这是我在测试文件夹上运行时得到的结果:

  • 测试文件夹(非灰色)
    • 文件夹一(灰色)
    • 文件夹二(非灰色)
      • 文件夹 A(灰色)
    • 文件夹三(非灰色)
      • 测试.txt
    • 文件夹四(非灰色)
      • 文件夹 A(非灰色)
        • 测试.txt

这是我正在寻找的结果:

  • 测试文件夹(非灰色)
    • 文件夹一(灰色)
    • 文件夹二(灰色)
      • 文件夹 A(灰色)
    • 文件夹三(非灰色)
      • 测试.txt
    • 文件夹四(非灰色)
      • 文件夹 A(非灰色)
        • 测试.txt

任何帮助将不胜感激!

哦,我相信我可以从 Hazel 运行工作流程。如果您有更好的方法让它偶尔自动运行,我也很想知道。

谢谢。

编辑:刚刚意识到 .ds_store 文件(我假设)导致文件夹也不显示为空,例如,如果我删除了文件夹中的最后一个文件。

ifa*_*fau 3

我尝试了一些案例,似乎它可以满足您的需要:

shell脚本,,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");
}
Run Code Online (Sandbox Code Playgroud)