Переменная сценария Bash с оператором if else, но с циклом

Я не очень разбираюсь в написании сценариев на bash. Но я пытаюсь проверить отдельные файлы xml с соответствующими файлами xsd в каталоге. Начальное название не меняется, но меняются даты.

Например:

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

  • File1_random_date.xml (случайная дата и время может быть 2016_06_12_10_38_13)
  • File2_random_date.xml
  • File2_random_date.xml
  • File3_random_date.xml


Я хотел бы проверить все файлы File2 * .xml и File2 * .xml на соответствие File2. все File1 * .xml против File1.xsd и т.д. и т.д.


что-то вроде:

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

Но я не уверен, как иметь строку регулярного выражения, возможно, для дат и сказать, существует ли File2 _ *. xml, проверяет каждый файл на File2.xsd.

Любая помощь, пожалуйста?

0
20.09.2016, 17:30
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
0
28.01.2020, 04:49

С zsh :

list=(file*_*.xml)
for prefix (${(u)list%%_*})
  xmllint --noout --schema $prefix.xsd ${prefix}_*.xml
0
28.01.2020, 04:49

Теги

Похожие вопросы