Como alterar a aparência de pastas vazias no localizador usando o Automator?

7

Estou tentando usar o Apple Automator para rotular pastas vazias em uma hierarquia. Basicamente, começo um projeto com uma hierarquia de pastas vazias e preencho-as enquanto trabalho. Eu quero um fluxo de trabalho para rotular todas as pastas vazias (cinza) que não contenham arquivos e seus descendentes também não contenham arquivos.

Em outras palavras, quando eu crio o projeto vazio, todas as pastas devem estar em cinza, pois não há "arquivos" em lugar algum, apenas pastas vazias. No entanto, uma vez que eu coloco um arquivo em algum lugar, ele é pai e todos os seus avós não seriam mais rotulados como cinza.

Eu achei que encontrei o que eu precisava em Como para alterar a aparência de pastas vazias no localizador? No entanto, é rotular as pastas vazias. No meu projeto, somente os últimos descendentes seriam cinza porque todas as pastas pai contêm pastas, portanto, não vazias.

Aqui está o código que estou executando em um script de shell / bin / bash no Automator:

find "$@" -type d -empty

E, em seguida, estou passando para um "item localizador de marcadores" para tornar os resultados cinzentos.

Este é o resultado que estou obtendo quando executado em uma pasta de teste:

  • Pasta de teste (não cinza)
    • Pasta Um (cinza)
    • Pasta Dois (não cinza)
      • Pasta A (cinza)
    • Pasta Três (não cinza)
      • Test.txt
    • Pasta Quatro (não cinza)
      • Pasta A (não cinza)
        • Test.txt

E aqui está o resultado que estou procurando:

  • Pasta de teste (não cinza)
    • Pasta Um (cinza)
    • Pasta Dois (cinza)
      • Pasta A (cinza)
    • Pasta Três (não cinza)
      • Test.txt
    • Pasta Quatro (não cinza)
      • Pasta A (não cinza)
        • Test.txt

Qualquer ajuda será muito apreciada!

Oh, também, acredito que posso executar o fluxo de trabalho a partir de Hazel. Se você tiver uma maneira melhor de executá-lo automaticamente de vez em quando, também adoraria saber disso.

Obrigado.

Edit: Apenas percebi que os arquivos .ds_store (suponho) estão fazendo com que as pastas também não apareçam vazias, se, por exemplo, eu apagar o último arquivo em uma pasta.

    
por Gary 31.12.2012 / 08:09

1 resposta

3

Eu tentei alguns casos e parece que funciona conforme necessário:

Script de shell, usr/bin/perl , passagem de entrada as arguments .

useFile::Find;find({wanted=>\&find_files,no_chdir=>1},@ARGV);subfind_files{if(-f$_){($file)=$_=~/.*\/(.*)$/;push(@all_files,$_)if($filene".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");
}
    
por 31.12.2012 / 16:46