Создать Plist с помощью Automator / AppleScript / Perl
-
09-10-2019 - |
Вопрос
У меня есть несколько папок изображений и хотели бы создать клип, содержащий имя файла и имя папки.
Например:
YELLOW
MARKIN.PNG
MARKOUT.PNG
BLUE
ARROW.PNG
RAZOR.PNG
Я хотел бы, чтобы Plist с корневым узлом массива, содержащий словари, так что:
<plist version="1.0">
<array>
<dict>
<key>name</key>
<string>MARKIN</string>
<key>colour</key>
<string>YELLOW</string>
</dict>
</array>
</plist>
Это достижимо, используя AppleScript или Automator или другой язык программирования? У меня есть около 60 изображений в 7 папках, и ввести все вручную, было бы настоящей болью.
Спасибо
Решение
Большинство кода здесь массируют вашу структуру каталогов в структуру данных, которые вам нужны:
use strict; use warnings;
use Data::Plist::XMLWriter;
my @plist;
for my $root_dir (@ARGV) {
opendir my $ROOT_DIR, $root_dir
or die $!;
my @dir_contents = map { s[\.\w\w\w$][]; $_ }
grep { not -d }
readdir $ROOT_DIR;
push @plist, { colour => $root_dir, name => $_ }
for @dir_contents;
}
my $writer = Data::Plist::XMLWriter->new;
my $str = $writer->write( \@plist );
print $str;
Это приводит к:
$ ls -l YELLOW BLUE
BLUE:
total 0
-rw-r--r-- 1 psilva adm 0 2010-11-12 14:53 ARROW.PNG
-rw-r--r-- 1 psilva adm 0 2010-11-12 14:53 RAZOR.PNG
YELLOW:
total 0
-rw-r--r-- 1 psilva adm 0 2010-11-12 14:53 MARKIN.PNG
-rw-r--r-- 1 psilva adm 0 2010-11-12 14:53 MARKOUT.PNG
$ perl tmp.pl YELLOW BLUE
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
<dict>
<key>colour</key>
<string>YELLOW</string>
<key>name</key>
<string>MARKOUT</string>
</dict>
<dict>
<key>colour</key>
<string>YELLOW</string>
<key>name</key>
<string>MARKIN</string>
</dict>
<dict>
<key>colour</key>
<string>BLUE</string>
<key>name</key>
<string>ARROW</string>
</dict>
<dict>
<key>colour</key>
<string>BLUE</string>
<key>name</key>
<string>RAZOR</string>
</dict>
</array>
</plist>
Другие советы
Библиотека системных событий имеет основные инструменты для создания файла Plist и добавления элементов. Пример кода, взятый из Веб-сайт Mac OS X Automation:
tell application "System Events"
-- create an empty property list dictionary item
set the parent_dictionary to make new property list item with properties {kind:record}
-- create new property list file using the empty dictionary list item as contents
set the plistfile_path to "~/Desktop/example.plist"
set this_plistfile to ¬
make new property list file with properties {contents:parent_dictionary, name:plistfile_path}
-- add new property list items of each of the supported types
make new property list item at end of property list items of contents of this_plistfile ¬
with properties {kind:boolean, name:"booleanKey", value:true}
make new property list item at end of property list items of contents of this_plistfile ¬
with properties {kind:date, name:"dateKey", value:current date}
make new property list item at end of property list items of contents of this_plistfile ¬
with properties {kind:list, name:"listKey"}
make new property list item at end of property list items of contents of this_plistfile ¬
with properties {kind:number, name:"numberKey", value:5}
make new property list item at end of property list items of contents of this_plistfile ¬
with properties {kind:record, name:"recordKey"}
make new property list item at end of property list items of contents of this_plistfile ¬
with properties {kind:string, name:"stringKey", value:"string value"}
end tell
Не связан с StackOverflow