0

我有大量需要重命名的 XML 文件。它们是 .plist 文件。

每个文件中都有一些标签,如下所示:

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

目前,所有文件都以长随机数命名,例如,659238592496052.record但我需要它们根据文件中的名称命名,例如SteveAllen.record(没有任何空格)。

我该怎么做?

4

2 回答 2

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
于 2013-03-13T20:03:10.063 回答
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 $!";
}
于 2013-03-13T20:12:11.833 回答