if else 문이 있지만 루프가 있는 Bash 스크립트 변수

if else 문이 있지만 루프가 있는 Bash 스크립트 변수

저는 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

관련 정보