2010-11-12 31 views
1

J'ai plusieurs dossiers d'images et je voudrais créer une plist contenant le nom du fichier et le nom du dossier.Créer Plist à l'aide d'Automator/AppleScript/Perl

Par exemple:

YELLOW 
    MARKIN.PNG 
    MARKOUT.PNG 
BLUE 
    ARROW.PNG 
    RAZOR.PNG 

Je voudrais un plist, avec un nœud racine de tableau, contenant des dictionnaires tels que:

<plist version="1.0"> 
<array> 
    <dict> 
     <key>name</key> 
     <string>MARKIN</string> 
     <key>colour</key> 
     <string>YELLOW</string> 
    </dict> 
</array> 
</plist> 

Est-ce réalisable en utilisant AppleScript ou Automator ou tout autre langage de programmation? J'ai environ 60 images dans 7 dossiers, et taper tout manuellement serait une vraie douleur.

Merci

Répondre

2

La plupart du code est ici Masser votre structure de répertoire dans la structure de données dont vous avez besoin:

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; 

Il en résulte:

$ 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

:: données Plist :: XMLWriter ne se construira pas sur mon système. faire le test continue d'échouer. Je suis sûr que votre solution fonctionne. Je vais continuer à essayer. – joec

4

La bibliothèque Événements système a les outils de base pour créer un fichier plist et ajouter des éléments. Code de l'échantillon prélevé du 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