2013-03-13 73 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 $!"; 
} 
相關問題