批量转换文件同时保留名称

Tli*_*ink 2 linux bash command-line calibre

我想使用以下命令将电子书从 epub 格式转换为 mobi 格式: calibre-convert books/*.epub books/*.mobi

但我想为所有文件保留相同的文件名。所以 book1.epub 将创建 book1.mobi book2.epub 将在转换后创建 book2.mobi。这在命令行中可行吗?还是我必须写一个 bash 脚本?

Kam*_*ski 6

( cd books && for file in *.epub; do calibre-convert "$file" "${file%epub}mobi"; done )
Run Code Online (Sandbox Code Playgroud)

这里主要的窍门是${file%epub},意思是“$fileepub末删除”。这种方式${file%epub}mobi翻译扩展名。

使用子外壳 ( (…)) 所以

  • 主 shell 的当前工作目录保持不变
  • 并且file主 shell 中的变量不会改变。

任何目录匹配*.epubbooks/将被传递到calibre-convert为好。这取决于工具将如何处理目录。你那里可能没有这样的目录;但如果你这样做了,请注意。

注:我完全不知道calibre-convert;我的命令中的语法只是从您的命令派生而来。