我正在嘗試使用 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");
}