2013-03-13 43 views
0

我有大量需要重命名的XML文件。他们是.plist文件。根据xml标记内容重命名文件

中的每个文件有一些标签,就像这样:

<key>Name</key> 
<string>Steve Allen</string> 
<key>Place</key> 
<string>London</string> 

目前,所有的文件被命名为长的随机数,象659238592496052.record但我需要他们的名字根据名称文件,如SteveAllen.record(没有任何空格)。

我该怎么做?

回答

1
for file in *.record 
do 
    nameline=$(grep -A 1 '<key>Name</key>' "$file" | tail -n +2) # Get line after Name key 
    name=${nameline/<string>/} # Remove initial <string> 
    name=${name/<\/string>/} # Remove trailing </string> 
    name=${name// /} # Remove all spaces 
    mv "$file" "$name".record 
done 
0

你张贴的所有片段不是有效的XML让我们假装它看起来像这样

<body> 
<item> 
<key>Name</key> 
<string>Steve Allen</string> 
</item> 
<item> 
<key>Place</key> 
<string>London</string> 
</item> 
</body> 

使用片段作为输入,这一计划将重新命名任意数量给出ARGS 如果文件您将程序保存为“myrename”,那么“myrename file1.xml file2.xml file3.xml”会将file1.xml file2.xml和file3.xml的路径名更改为第一项

被称为“关键“似乎以一种神奇的方式工作:/

#!/usr/bin/perl 

use XML::Simple; 
for $file (@ARGV[ 0 .. $#ARGV ]) { 

    my $ref = XMLin($file); 

    $new_name = $ref->{'item'}->{'Name'}->{'string'}; 

    rename $file, "$new_name.xml" || warn "couldn't rename $file $!"; 
}