Variável de script bash com a instrução if else, mas com loop

0

Eu não sou muito experiente com scripts bash. Mas estou tentando validar arquivos xml individuais com arquivos xsd correspondentes em um diretório. O nome inicial não muda, mas as datas mudam.

Por exemplo:

  • Arquivo1.xsd
  • File2.xsd
  • File3.xsd

  • File1_random_date.xml (a hora da data aleatória pode ser 2016_06_12_10_38_13)
  • File2_random_date.xml
  • File2_random_date.xml
  • File3_random_date.xml


Eu gostaria de validar todos os arquivos File2 * .xml contra o arquivo2.xsd e todos os arquivos1 * .xml contra o arquivo1.xsd etc etc


algo como:

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

Mas não sei como ter strings regex para datas e dizer se File2 _ *. xml existe, valida cada arquivo contra o arquivo2.xsd.

Alguma ajuda, por favor?

    
por Poor_linux_guy 20.09.2016 / 16:30

2 respostas

0

com zsh :

list=(file*_*.xml)
for prefix (${(u)list%%_*})
  xmllint --noout --schema $prefix.xsd ${prefix}_*.xml
    
por 20.09.2016 / 16:41
0

Algo parecido com isso pode ajudar (usando 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

Se você quiser verificar todos os arquivos XML correspondentes em uma única operação, isso funcionará:

# 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
    
por 20.09.2016 / 16:39