Gar*_*ary 7 finder bash shell-script automator macos
我正在尝试使用 Apple Automator 在层次结构中标记空文件夹。基本上,我从一个带有空文件夹层次结构的项目开始,并在工作时填充它们。我想要一个工作流来标记所有不包含文件且其后代也不包含文件的空文件夹(灰色)。
换句话说,当我创建空项目时,所有文件夹都应该是灰色的,因为任何地方都没有“文件”,只有空文件夹。但是,一旦我将文件放在某处,它的父文件和所有祖父母文件将不再被标记为灰色。
我以为我在如何更改 finder 中空文件夹的外观中找到了我需要的东西?但是,它正在标记空文件夹。在我的项目中,只有最后一个后代才会是灰色的,因为所有父文件夹都包含文件夹,因此,不是空的。
这是我在 Automator 的 /bin/bash shell 脚本中运行的代码:
find "$@" -type d -empty
Run Code Online (Sandbox Code Playgroud)
然后我将它传递给“标签查找器项目”以将结果变为灰色。
这是我在测试文件夹上运行时得到的结果:
这是我正在寻找的结果:
任何帮助将不胜感激!
哦,我相信我可以从 Hazel 运行工作流程。如果您有更好的方法让它偶尔自动运行,我也很想知道。
谢谢。
编辑:刚刚意识到 .ds_store 文件(我假设)导致文件夹也不显示为空,例如,如果我删除了文件夹中的最后一个文件。
我尝试了一些案例,似乎它可以满足您的需要:
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");
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
510 次 |
| 最近记录: |