Automator を使用して Finder 内の空のフォルダの外観を変更するにはどうすればよいでしょうか?

Automator を使用して Finder 内の空のフォルダの外観を変更するにはどうすればよいでしょうか?

Apple Automator を使用して、階層内の空のフォルダーにラベルを付けようとしています。基本的に、空のフォルダーの階層でプロジェクトを開始し、作業しながらフォルダーを埋めていきます。ファイルが含まれておらず、その子孫にもファイルが含まれていないすべての空のフォルダー (灰色) にラベルを付けるワークフローが必要です。

つまり、空のプロジェクトを作成すると、どこにも「ファイル」はなく、空のフォルダーだけなので、すべてのフォルダーが灰色になるはずです。ただし、ファイルをどこかに配置すると、その親とすべての祖父母は灰色でラベル付けされなくなります。

私は必要なものを見つけたと思ったFinder で空のフォルダの外観を変更するにはどうすればいいですか?ただし、空のフォルダーにラベルが付けられています。私のプロジェクトでは、すべての親フォルダーにフォルダーが含まれているため、空ではなく、最後の子孫のみが灰色になります。

以下は、Automator の /bin/bash シェル スクリプトで実行しているコードです。

find "$@" -type d -empty

そして、それを「ラベルファインダーアイテム」に渡して、結果をグレーにします。

テスト フォルダーで実行した場合の結果は次のとおりです。

  • テストフォルダ(灰色ではない)
    • フォルダー 1 (グレー)
    • フォルダ 2 (灰色ではない)
      • フォルダA(グレー)
    • フォルダ 3 (灰色ではない)
      • テスト.txt
    • フォルダー 4 (灰色ではない)
      • フォルダA(灰色ではない)
        • テスト.txt

私が求めている結果は次のとおりです。

  • テストフォルダ(灰色ではない)
    • フォルダー 1 (グレー)
    • フォルダ 2 (グレー)
      • フォルダA(グレー)
    • フォルダ 3 (灰色ではない)
      • テスト.txt
    • フォルダー 4 (灰色ではない)
      • フォルダA(灰色ではない)
        • テスト.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");
}

関連情報