我需要重命名大量的XML文件。它们是.plist文件。
在每个文件中都有一些标签,如下所示:
<key>Name</key>
<string>Steve Allen</string>
<key>Place</key>
<string>London</string>
目前,所有文件都使用长随机数命名,例如659238592496052.record
,但我需要根据文件中的名称命名它们,例如SteveAllen.record
(没有任何空格)。
我该怎么做?
答案 0 :(得分: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
答案 1 :(得分: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 $!";
}