簡體   English   中英

根據xml標簽內容重命名文件

[英]Rename files according to xml tag contents

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

每個文件中都有一些標簽,如下所示:

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

目前,所有文件都使用長隨機數命名,如659238592496052.record但我需要根據文件中的名稱將它們命名為文件名,如SteveAllen.record (不帶任何空格)。

我該怎么做?

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

您發布的片段不是有效的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 $!";
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM