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