저는 bash 스크립팅에 대한 경험이 많지 않습니다. 하지만 디렉토리에 있는 해당 xsd 파일을 사용하여 개별 xml 파일의 유효성을 검사하려고 합니다. 시작 이름은 동일하게 유지되지만 날짜가 변경됩니다.
예를 들어:
- 파일 1.xsd
- 파일2.xsd
- 파일 3.xsd
- File1_random_date.xml (임의의 날짜 시간은 2016_06_12_10_38_13일 수 있음)
- 파일 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
한 번의 작업으로 일치하는 모든 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