我正在尝试对上一个问题使用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问题。如何更改此脚本以使其按预期工作?
答案 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