Comment changer l'apparence des dossiers vides dans le Finder à l'aide d'Automator?

7

J'essaie d'utiliser Apple Automator pour étiqueter des dossiers vides dans une hiérarchie. Fondamentalement, je commence un projet avec une hiérarchie de dossiers vides et les remplis au fur et à mesure que je travaille. Je souhaite qu'un workflow identifie tous les dossiers vides (gris) qui ne contiennent aucun fichier et que leurs descendants ne contiennent également aucun fichier.

En d'autres termes, lorsque je crée un projet vide, tous les dossiers doivent être gris, car il n'y a pas de "fichiers" où que ce soit, juste des dossiers vides. Cependant, une fois que je place un fichier quelque part, le nom de son parent et celui de tous ses grands-parents ne sont plus étiquetés en gris.

Je pensais avoir trouvé ce dont j'avais besoin à Comment modifier l'apparence des dossiers vides dans le Finder? Cependant, il étiquète les dossiers vides. Dans mon projet, seuls les derniers descendants seraient gris, car tous les dossiers parents contiennent des dossiers et ne sont donc pas vides.

Voici le code que j'utilise dans un script shell / bin / bash dans Automator:

find "$@" -type d -empty

Et ensuite, je le passe à un "élément de recherche d'étiquettes" pour que les résultats deviennent gris.

Voici le résultat que j'obtiens lors de l'exécution sur un dossier de test:

  • Dossier de test (pas gris)
    • Premier dossier (gris)
    • Dossier Deux (pas gris)
      • Dossier A (gris)
    • Dossier trois (pas gris)
      • Test.txt
    • Dossier quatre (pas gris)
      • Dossier A (pas gris)
        • Test.txt

Et voici le résultat que je recherche:

  • Dossier de test (pas gris)
    • Premier dossier (gris)
    • Deuxième dossier (gris)
      • Dossier A (gris)
    • Dossier trois (pas gris)
      • Test.txt
    • Dossier quatre (pas gris)
      • Dossier A (pas gris)
        • Test.txt

Toute aide sera fortement appréciée!

Oh, aussi, je crois que je peux exécuter le flux de travail de Hazel. Si vous avez un meilleur moyen de le faire fonctionner automatiquement de temps en temps, j'aimerais bien le savoir aussi.

Merci.

Edit: Je viens de me rendre compte que les fichiers .ds_store (je suppose) ne font pas apparaître les dossiers vides, si, par exemple, je supprime le dernier fichier d’un dossier.

Gary
la source

Réponses:

3

J'ai essayé quelques cas, et semble que cela fonctionne comme vous avez besoin:

Script shell,, usr/bin/perlpasse la saisie as arguments.

service d'automation

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");
}
Ifau
la source
Fonctionne à merveille pour étiqueter les dossiers vides. Pouvez-vous également lui donner une étiquette pour les dossiers non vides sans couleur d'étiquette? Je suppose que si vous pouvez définir une variable que je peux obtenir et ajouter un nouvel élément de recherche d'étiquettes, cela le ferait.
Gary
À moins que vous n'ayez une méthode plus propre, j'ai défini une variable, puis j'ai utilisé la première partie de mon code ci-dessus pour effacer les étiquettes, puis j'ai obtenu le varialble et utilisé votre code pour colorer en gris les dossiers vides. Travaux. Si je n'entends pas avec une solution meilleure, je vérifierai votre réponse comme étant la réponse acceptée. Merci encore.
Gary
J'ai édité la réponse. Content de vous aider.
ifau
Cela fonctionne à merveille. Le seul problème à présent, c’est que Hazel ne détecte pas les changements profonds au sein de la hiérarchie, elle ne fonctionne donc pas automatiquement, comme je le soupçonnais. Quand je le lance manuellement, il fait exactement ce que j'ai demandé. Merci. Maintenant, je dois juste trouver le meilleur moyen de l’exécuter automatiquement.
Gary
Merci encore pour le script ci-dessus. Je n'ai toujours pas un bon moyen de l'exécuter automatiquement. Des pensées? Ma préférence serait que cela fonctionne sur n'importe quel changement dans n'importe quel dossier, mais je réalise que cela peut être difficile voire impossible à réaliser. En guise de sauvegarde, je prendrais l'exécution sur un calendrier. Merci.
Gary