web-dev-qa-db-ja.com

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

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

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

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

Automatorの/ bin/bashシェルスクリプトで実行しているコードは次のとおりです。

find "$@" -type d -empty

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

テストフォルダで実行したときに得られる結果は次のとおりです。

  • テストフォルダ(灰色ではありません)
    • フォルダ1(灰色)
    • フォルダ2(灰色ではない)
      • フォルダA(灰色)
    • フォルダー3(灰色ではない)
      • Test.txt
    • フォルダー4(灰色ではない)
      • フォルダA(灰色ではない)
        • Test.txt

そして、これが私が探している結果です:

  • テストフォルダ(灰色ではありません)
    • フォルダ1(灰色)
    • フォルダ2(灰色)
      • フォルダA(灰色)
    • フォルダー3(灰色ではない)
      • Test.txt
    • フォルダー4(灰色ではない)
      • フォルダA(灰色ではない)
        • Test.txt

どんな助けでも大歓迎です!

ああ、また、私はヘーゼルからワークフローを実行できると信じています。たまに自動的に実行するためのより良い方法があれば、それも知りたいです。

ありがとう。

編集:たとえば、フォルダー内の最後のファイルを削除した場合、.ds_storeファイル(私が推測する)がフォルダーも空に表示されないことに気づきました。

7
Gary

私はいくつかのケースを試しましたが、必要に応じて機能するようです。

シェルスクリプト、usr/bin/Perl、入力を渡すas arguments

automator service

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");
}
3
ifau