0

I am not very experienced with bash scripting. But I am trying to validate individual xml files with corresponding xsd files in a directory. The beginning name does not change but the dates changes.

For example:

  • File1.xsd
  • File2.xsd
  • File3.xsd

  • File1_random_date.xml (random date time can be 2016_06_12_10_38_13)
  • File2_random_date.xml
  • File2_random_date.xml
  • File3_random_date.xml


I would like validate all File2*.xml files against File2.xsd and all File1*.xml against File1.xsd etc etc


something like:

xmllint --noout --schema File2.xsd File2_*.xml xmllint --noout --schema File1.xsd File1_*.xml 

But i am not sure how to have regex string maybe for dates and say if File2_*.xml exist, validates each file against File2.xsd.

Any help please?

1
  • The shell doesn't (usually) use regular expressions. It uses shell globs, where * represents zero of more characters and ? represents a single character. Just like you're using them in your Question.CommentedSep 20, 2016 at 14:35

2 Answers 2

0

With zsh:

list=(file*_*.xml) for prefix (${(u)list%%_*}) xmllint --noout --schema $prefix.xsd ${prefix}_*.xml 
1
  • You should explain more about how your commands work, rather than just posting commands.
    – Centimane
    CommentedSep 20, 2016 at 20:26
0

Something like this may help (using 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 

If you want to check all the matching XML files in a single operation, this would work:

# 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 

    You must log in to answer this question.

    Start asking to get answers

    Find the answer to your question by asking.

    Ask question

    Explore related questions

    See similar questions with these tags.