Apple Automatorを使用して、階層内の空のフォルダーにラベルを付けようとしています。基本的に、空のフォルダーの階層でプロジェクトを開始し、作業中にそれらを埋めます。ワークフローが必要です。ファイルを含まず、その子孫にもファイルを含まないすべての空のフォルダー(灰色)にラベルを付けます。
つまり、空のプロジェクトを作成すると、どこにも「ファイル」がなく、空のフォルダーだけであるため、すべてのフォルダーが灰色になります。ただし、ファイルをどこかに配置すると、そのファイルは親になり、すべての祖父母に灰色のラベルが付けられなくなります。
ファインダーで空のフォルダーの外観を変更するにはどうすればよいですか? で必要なものが見つかったと思いましたが、空のフォルダーにラベルを付けています。私のプロジェクトでは、すべての親フォルダーにフォルダーが含まれているため、最後の子孫だけが灰色になり、空ではありません。
Automatorの/ bin/bashシェルスクリプトで実行しているコードは次のとおりです。
find "$@" -type d -empty
そして、それを「ラベルファインダーアイテム」に渡して、結果を灰色にします。
テストフォルダで実行したときに得られる結果は次のとおりです。
そして、これが私が探している結果です:
どんな助けでも大歓迎です!
ああ、また、私はヘーゼルからワークフローを実行できると信じています。たまに自動的に実行するためのより良い方法があれば、それも知りたいです。
ありがとう。
編集:たとえば、フォルダー内の最後のファイルを削除した場合、.ds_storeファイル(私が推測する)がフォルダーも空に表示されないことに気づきました。
私はいくつかのケースを試しましたが、必要に応じて機能するようです。
シェルスクリプト、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");
}