我正在尝试使用 Apple Automator 标记层次结构中的空文件夹。基本上,我从一个空文件夹层次结构开始一个项目,并在工作时填充它们。我想要一个工作流程来标记所有不包含任何文件的空文件夹(灰色),并且它们的后代也不包含任何文件。
换句话说,当我创建空项目时,所有文件夹都应为灰色,因为任何地方都没有“文件”,只有空文件夹。但是,一旦我将文件放置在某处,它的父级和所有祖父级将不再标记为灰色。
我以为我找到了我需要的东西如何更改 Finder 中空文件夹的外观?但是,它标记的是空文件夹。在我的项目中,只有最后的后代文件夹会是灰色的,因为所有父文件夹都包含文件夹,因此不为空。
这是我在 Automator 中的 /bin/bash shell 脚本中运行的代码:
find "$@" -type d -empty
然后我将它传递给“标签查找器项目”以将结果变为灰色。
这是我在测试文件夹上运行时得到的结果:
- 测试文件夹(非灰色)
- 文件夹一(灰色)
- 文件夹二(非灰色)
- 文件夹A(灰色)
- 文件夹三(非灰色)
- 测试.txt
- 文件夹四(非灰色)
- 文件夹 A(非灰色)
- 测试.txt
- 文件夹 A(非灰色)
这是我想要的结果:
- 测试文件夹(非灰色)
- 文件夹一(灰色)
- 文件夹二(灰色)
- 文件夹A(灰色)
- 文件夹三(非灰色)
- 测试.txt
- 文件夹四(非灰色)
- 文件夹 A(非灰色)
- 测试.txt
- 文件夹 A(非灰色)
任何帮助将不胜感激!
哦,另外,我相信我可以从 Hazel 运行工作流程。如果您有更好的方法让它偶尔自动运行,我也很乐意知道。
谢谢。
编辑:刚刚意识到.ds_store 文件(我假设)会导致文件夹也不会显示为空,例如,如果我删除文件夹中的最后一个文件。
答案1
我尝试了几种情况,似乎它可以满足你的需要:
Shell 脚本,,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");
}