2010-11-12 44 views
1

我有幾個圖像文件夾,並且想創建一個包含文件名稱和文件夾名稱的plist。使用Automator/AppleScript/Perl創建Plist

例如:

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或自動機或其他編程語言?我在7個文件夾中有大約60個圖像,並且手動輸入所有內容將是一件非常痛苦的事情。

謝謝

回答

2

這裏大部分代碼按摩你的目錄結構到你需要的數據結構:

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> 
+0

數據::的plist :: XMLWriter不會在我的系統上建立。使測試保持失敗。我相信你的解決方案的作品我會繼續嘗試。 – joec 2010-11-16 10:36:29

4

系統事件庫具有創建plist文件和添加元素的基本工具。從Mac OS X Automation website採取的示例代碼:

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