我有一个包含一些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命令无效。我能做错什么?
答案 0 :(得分:1)
这是一种zsh方法,因为它标记了它。
for f in **/*.foo(.); print -- java ... -o $f:r.bar $f
如果您认为它看起来不错,请移除print --
。
(.)
仅说文件。 :r
表示删除.foo
扩展名。将路径操纵器记住为" erth"用于扩展/移除/尾部/头部。
还有zmv
-p
选项来调用你的java命令。