web-dev-qa-db-ja.com

名前を保持しながらファイルをバッチ変換する

次のコマンドを使用して、電子書籍をepub形式からmobi形式に変換したいと思います。calibre-convert books/*.epub books/*.mobi

しかし、私はすべてのファイルに同じファイル名を保持したいと思います。したがって、book1.epubはbook1.mobiを作成しますbook2.epubは変換後にbook2.mobiを作成します。これはコマンドラインで実行できますか?または、bashスクリプトを作成する必要がありますか?

2
Tlink
( cd books && for file in *.epub; do calibre-convert "$file" "${file%epub}mobi"; done )

ここでの主なトリックは${file%epub}です。これは、「$fileの最後にepubが削除されている」ことを意味します。このようにして、${file%epub}mobiは拡張子を変換します。

サブシェル((…))が使用されているので

  • メインシェルの現在の作業ディレクトリはそのまま残ります
  • メインシェルのfile変数は変更されません。

*.epubbooks/に一致するディレクトリは、calibre-convertにも渡されます。ディレクトリをどう処理するかはツール次第です。おそらくそこにはそのようなディレクトリはありません。ただし、そうする場合は注意が必要です。

注:私はcalibre-convertをまったく知りません。私のコマンドの構文は、単にコマンドから派生したものです。

6