私はbashスクリプトの経験があまりありません。ただし、ディレクトリ内の対応するxsdファイルを使用して個々のxmlファイルを検証しようとしています。開始名は同じままですが、日付が変更されます。
たとえば、
- ファイル1.xsd
- ファイル2.xsd
- ファイル3.xsd
- File1_random_date.xml
- ファイル2_random_date.xml
- ファイル2_random_date.xml
- ファイル3_random_date.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
1回の操作で一致するすべての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