Estoy intentando utilizar Apple Automator para etiquetar carpetas vacías en una jerarquía. Básicamente, comienzo un proyecto con una jerarquía de carpetas vacías y las lleno mientras trabajo. Quiero un flujo de trabajo para etiquetar todas las carpetas vacías (grises) que no contienen archivos y sus descendientes tampoco contienen archivos.
En otras palabras, cuando creo el proyecto vacío, todas las carpetas deberían estar en gris, ya que no hay "archivos" en ninguna parte, solo carpetas vacías. Sin embargo, una vez que coloco un archivo en algún lugar, su padre y todos sus abuelos ya no estarán etiquetados en gris.
Pensé que encontré lo que necesitaba en¿Cómo cambiar la apariencia de las carpetas vacías en el buscador?sin embargo, está etiquetando carpetas vacías. En mi proyecto, solo los últimos descendientes serían grises porque todas las carpetas principales contienen carpetas y, por lo tanto, no están vacías.
Aquí está el código que estoy ejecutando en un script de shell /bin/bash en Automator:
find "$@" -type d -empty
Y luego lo paso a "Elementos del buscador de etiquetas" para que los resultados se vuelvan grises.
Este es el resultado que obtengo cuando lo ejecuto en una carpeta de prueba:
- Carpeta de prueba (no gris)
- Carpeta uno (gris)
- Carpeta dos (no gris)
- Carpeta A (gris)
- Carpeta tres (no gris)
- prueba.txt
- Carpeta cuatro (no gris)
- Carpeta A (no gris)
- prueba.txt
- Carpeta A (no gris)
Y aquí está el resultado que estoy buscando:
- Carpeta de prueba (no gris)
- Carpeta uno (gris)
- Carpeta dos (gris)
- Carpeta A (gris)
- Carpeta tres (no gris)
- prueba.txt
- Carpeta cuatro (no gris)
- Carpeta A (no gris)
- prueba.txt
- Carpeta A (no gris)
¡Cualquier ayuda será apreciada!
Ah, también creo que puedo ejecutar el flujo de trabajo desde Hazel. Si tienes una mejor manera de ejecutarlo automáticamente de vez en cuando, me encantaría saberlo también.
Gracias.
Editar: Me acabo de dar cuenta de que los archivos .ds_store (supongo) hacen que las carpetas tampoco aparezcan vacías si, por ejemplo, elimino el último archivo de una carpeta.
Respuesta1
Probé algunos casos y parece que funciona según lo necesario:
Script de Shell usr/bin/perl
, pasar entrada 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");
}