在 java 中使用 basename 命名输出文件

Using basename to name output file in java

我有一个目录的递归结构,其中包含一些 foo 文件,我想使用 XSLT 1.0 样式表将这些文件转换为 bar 文件。我有:

dir
|-- subdir
|   |-- file1.foo
|   |-- file2.foo
|   |-- file3.foo

我想获得:

dir
|-- subdir
|   |-- file1.foo
|   |-- file1.bar
|   |-- file2.foo
|   |-- file2.bar
|   |-- file3.foo
|   |-- file3.bar

要捕获不带扩展名的文件的基本名称,我尝试过:

$ find . -type f -exec java -jar C:/saxon6-5-5/saxon.jar -o $(basename {} .foo).bar {} stylesheet.xsl \;

$ find . -type f -exec java -jar C:/saxon6-5-5/saxon.jar -o `basename {} .foo`.bar {} stylesheet.xsl \;

两者的结果相同:

dir
|-- subdir
|   |-- file1.foo
|   |-- file1.foo.bar
|   |-- file2.foo
|   |-- file2.foo.bar
|   |-- file3.foo
|   |-- file3.foo.bar

basename 命令似乎不起作用。我做错了什么?

这是一个 zsh 方法,因为它是这样标记的。

for f in **/*.foo(.); print -- java ... -o $f:r.bar $f

如果您认为 print -- 看起来不错,请将其移除。

(.) 表示仅文件。 :r 表示删除 .foo 扩展名。将路径操纵器记住为 "erth" for extension/remove/tail/head.

会很有帮助

还有 zmv-p 选项来调用您的 java 命令。