我对 bash 脚本编写不太有经验。但我试图用目录中相应的 xsd 文件验证各个 xml 文件。起始名称不变,但日期发生变化。
例如:
- 文件1.xsd
- 文件2.xsd
- 文件3.xsd
- File1_random_date.xml(随机日期时间可以是2016_06_12_10_38_13)
- 文件2_随机_日期.xml
- 文件2_随机_日期.xml
- 文件3_随机_日期.xml
我想根据 File2.xsd 验证所有 File2*.xml 文件,并根据 File1.xsd 验证所有 File1*.xml 等
就像是:
xmllint --noout --schema File2.xsd File2_*.xml
xmllint --noout --schema File1.xsd File1_*.xml
但我不确定如何使用正则表达式字符串来表示日期,并说如果 File2_*.xml 存在,则根据 File2.xsd 验证每个文件。
有什么帮助吗?
答案1
和zsh
:
list=(file*_*.xml)
for prefix (${(u)list%%_*})
xmllint --noout --schema $prefix.xsd ${prefix}_*.xml
答案2
像这样的事情可能会有所帮助(使用bash
):
# Iterate across the XSD files
for xsdfile in *.xsd
do
test -f "$xsdfile" || continue
# Strip the ".xsd" suffix and search for XML files matching this prefix
prefix="${xsdfile%.xsd}"
for xmlfile in "$xsdfile"_*.xml
do
test -f "$xmlfile" || continue
xmllint --noout --schema "$xsdfile" "$xmlfile"
done
done
如果您想在一次操作中检查所有匹配的 XML 文件,可以这样做:
# Iterate across the XSD files
for xsdfile in *.xsd
do
test -f "$xsdfile" || continue
# Strip the ".xsd" suffix and search for XML files matching this prefix
prefix="${xsdfile%.xsd}"
for xmlfile in "$xsdfile"_*.xml
do
# Skip if no files, else do it just once
test -f "$xmlfile" || continue
xmllint --noout --schema "$xsdfile" "$xsdfile"_*.xml
break
done
done