Контекст безопасности препятствовал запуску сценария. Журналы systemd
показали, что сценарий не запускался, хотя всем пользователям было разрешено его выполнять; какой-то политике безопасности не понравился путь к скрипту.
Я переместил скрипт в /bin
и ошибки тут же разрешились сами собой.
Аналогично решению xmlstarlet, вот как это сделать с помощью утилиты Saxon Gizmo:
java net.sf.saxon.Gizmo -s:/tmp/xml
/>update //import_url translate(., '_', '-')
/>save /tmp/xml
/>quit
https://saxonica.com/documentation/index.html#!Гизмо
Чтобы обработать все файлы в каталоге, вы можете запустить это преобразование XSLT 3.0:
<xsl:transform version="3.0" expand-text="yes" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:mode on-no-match="shallow-copy"/>
<xsl:template match="import_url">
<xsl:copy>{translate(., '_', '-')}</xsl:copy>
</xsl:template>
<xsl:template name="xsl:initial-template">
<xsl:for-each select="collection('file:///my/input/directory?recurse=yes')">
<xsl:result-document href="file:///my/output/directory/{tokenize(document-uri(),'/')[last()]}">
<xsl:apply-templates/>
</xsl:result-document>
</xsl:for-each>
</xsl:template>
</xsl:transform>