Атрибут kMDItemFSLabel
является свойством Finder.Вам нужно использовать способ связи с Finder для изменения его данных.Насколько я знаю, вы не можете ничего изменить с помощью Perl, чтобы изменить данные Finder без использования Finder.
Есть несколько способов сделать это:
Использовать CamelBones , когда выйдет новая версия.Это позволяет связать Objective C с Perl.Тогда вам нужно будет использовать метод Apple с системными вызовами Cocoa.Крутая кривая обучения для Какао ...
Если у вас есть инструменты разработчика, используйте / Developer / Tools / SetFile (если это поддерживает элемент метаданных)
Используйте osascript для отправки сообщения в Finder, чтобы изменить цвет файла.Вы можете посмотреть на этот более ранний пост SO, чтобы узнать, как это сделать.
Большинство связанных с Perl мостов Objective C / Cocoa, к сожалению, умерли.MacPerl не обновлялся с 2005 года.
Почти все самые простые методы требуют знания хотя бы минимального количества Applescript и вызова текста этого скрипта через интерполированный вызов типа osascript .
В своей 1-строчной форме osascript делает Perl красивым:
osascript -e 'tell application "Finder"' -e "activate" -e "display dialog \"hello\"" -e 'end tell'
Чтобы использовать osascript из Perl, большинство используют документ ЗДЕСЬ.Есть примеры из I книги, которую я назвал Applescript - Полное руководство и из Брайан Д. Фой об управлении iTunes с помощью Perl .
Вот скрипт на Perl Iнаписал для установки цвета файла с помощью osascript:
#!/usr/bin/perl
use strict; use warnings;
use File::Spec;
use String::ShellQuote;
sub osahere {
my $rtr;
my $scr='osascript -ss -e '."'".join ('',@_)."'";
open my $fh, '-|', $scr or die "death on osascript $!";
$rtr=do { local $/; <$fh> };
close $fh or die "death on osascript $!";
return $rtr;
}
sub set_file_color {
# -- No color = 0
# -- Orange = 1
# -- Red = 2
# -- Yellow = 3
# -- Blue = 4
# -- Purple = 5
# -- Green = 6
# -- Gray = 7
my $file=shift;
my $color=shift || 0;
$color=0 if $color<0;
$color=7 if $color>7;
$file=File::Spec->rel2abs($file)
unless File::Spec->file_name_is_absolute( $file );
$file=shell_quote($file);
return undef unless -e $file;
my $rtr=osahere <<"END_SET_COLOR" ;
tell application "Finder"
set f to "$file"
set ItemToLabel to POSIX file f as alias
set the label index of ItemToLabel to $color
end tell
END_SET_COLOR
return $rtr;
}
set_file_color("2591.txt",2);
Если цвет Finder равен 0, kMDItemFSLabel
равен 0. Если установлен какой-либо цвет, kMDItemFSLabel
становится 8-цветным.т. е. метка «оранжевый» составляет label index
1, kMDItemFSLabel
= 7;метка "красный" - label index
2, kMDItemFSLabel
= 6;и так далее.