0

Windows バッチ ファイルを Linux シェル スクリプト (bash) に移植しようとしています。

頭の痛い部分は次のとおりです。

for /r %%G in (*Metadata*.xml) DO (
java -jar %SAXON%\saxon9he.jar -o:%%~nG.csv "%%G" %WORKDIR%\transformBQT.xsl)

これにより、テキストメタデータを含むすべての .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 拡張子付き) と同じ名前にする方法がわからないため、これはうまく機能しません。

任意のヒント?

4

2 に答える 2

4

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

ファイル名のパス/名前にスペースが含まれている場合、この単純なアプローチは失敗します。

于 2013-05-02T15:33:53.493 に答える