根据元素的内容重命名XML文件

时间:2019-03-26 13:03:42

标签: xml bash shell xpath

我正在尝试对上一个问题使用hek2mgl's solution,并收到一条错误消息,希望您能为我提供帮助。

我想做的事情:重命名XML文件,以便它们反映标识符元素的内容。

这是我使用的确切代码:

find . -maxdepth 1 -name 'part*.xml' -exec ./rename_xml.sh {} \;

我的rename_xml脚本如下:

#!/bin/bash

id=$(xmllint --xpath '//identifier' "$1" | sed -r 's/[^"]+"([^"]+).*/\1/')
mv -v "$1" "$id.xml"

示例源XML文件如下所示:

<root>
   <title>title</title>
   <identifier>001</identifier>
</root>

运行find命令时,出现以下错误消息。

sed: illegal option -- r
usage: sed script [-Ealn] [-i extension] [file ...]
       sed [-Ealn] [-i extension] [-e script] ... [-f script_file] ... [file ...]
XPath set is empty
./.xml -> .xml

我猜想这里有两件事发生-sed的非工作版本(非法-r选项)以及XPath问题。如何更改此脚本以使其按预期工作?

1 个答案:

答案 0 :(得分:1)

这样对您有用吗?

#!/bin/bash

find . -maxdepth 1 -name "part*.xml" | while read file
do
   id=$(xmllint --xpath 'string(//identifier)' $file)
   echo "mv $file $id.xml"
   mv $file $id.xml
done