2013-03-13 5 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> 

처럼 보이는 척 할 수없는 "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 $!"; 
}