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

在java中使用basename命名输出文件,java,find,xslt-1.0,filenames,zsh,Java,Find,Xslt 1.0,Filenames,Zsh,我有一个递归目录结构,其中包含一些foo文件,我希望使用XSLT1.0样式表将这些文件转换为bar文件。我有: dir |-- subdir | |-- file1.foo | |-- file2.foo | |-- file3.foo 我想得到: dir |-- subdir | |-- file1.foo | |-- file1.bar | |-- file2.foo | |-- file2.bar | |-- file3.foo | |-- file3

我有一个递归目录结构,其中包含一些
foo
文件,我希望使用XSLT1.0样式表将这些文件转换为
bar
文件。我有:

dir
|-- subdir
|   |-- file1.foo
|   |-- file2.foo
|   |-- file3.foo
我想得到:

dir
|-- subdir
|   |-- file1.foo
|   |-- file1.bar
|   |-- file2.foo
|   |-- file2.bar
|   |-- file3.foo
|   |-- file3.bar
为了捕获不带扩展名的文件的basename,我尝试了:

$ 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方法,因为它是这样标记的


对于**/*.foo(.)中的f;打印--java-o$f:r.bar$f

当您确信打印效果良好时,请删除打印--

()
只显示文件。
:r
表示删除
.foo
扩展名。对于extension/remove/tail/head,请记住路径操纵器为“erth”


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

谢谢,Jayan。我看到了那一页。我知道您打算在我的一行代码中使用
-exec sh-c
。但是,我不知道如何将
sh-c
java-jar
结合起来。如果不仔细研究这个问题,我会建议,这是一个非常擅长这类任务的方法。谢谢你,4ae1e1。事实上,这似乎可以间接地起到帮助作用。我正在Windows上工作,因此我必须找到一个端口或切换到Linux来完成此任务。它似乎可以工作,谢谢。我没有在其他shell中尝试过,但我知道它可能只在zsh中有效。为了便于记录,我的代码是**/*.foo(.)中f的
;java-jarc:/Apps/saxon6-5-5/saxon.jar-o$f:r.bar$f stylesheet.xsl
dir
|-- subdir
|   |-- file1.foo
|   |-- file1.foo.bar
|   |-- file2.foo
|   |-- file2.foo.bar
|   |-- file3.foo
|   |-- file3.foo.bar