我正在尝试将windows批处理文件移植到linux shell脚本(bash)。
下面是让我头疼的部分:
for /r %%G in (*Metadata*.xml) DO (
java -jar %SAXON%\saxon9he.jar -o:%%~nG.csv "%%G" %WORKDIR%\transformBQT.xsl)
这样做的目的是找到包含文本元数据的all.xml文件,然后对每个文件运行xslt转换。这需要3个参数
-o是输出文件(这将是与.xml同名的.csv)
下一个是目标文件
最后一个参数是.xsl文件
我正在考虑使用以下方法:
find /results/ -type f -name "*Metadata*.xml" -exec
java -jar $SAXON/saxon9he.jar -o:??? {} $WORKDIR/transformXMI.xsl
但这不太管用,因为我不知道如何使输出文件与.xml同名(扩展名为.csv)
有什么建议吗?
最佳答案
您可以逐行处理find
的结果,并将<file>.xml
转换为<file>.csv
:
find /results/ -type f -name "*Metadata*.xml" | while read file; do java -jar $SAXON/saxon9h3.jar -o:${file%.xml}.csv $file $WORKDIR/transform.XMI.xsl; done
如果文件名的路径/名称中有空格,这种简单的方法将失败。
关于linux - Linux Shell脚本-查找所有文件并在每个文件上运行命令,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16341842/