存在しないファイルにglobbing結果を中括弧拡張コピーにすることはできますか?

存在しないファイルにglobbing結果を中括弧拡張コピーにすることはできますか?

Bashでは、中括弧拡張はワイルドカード結果を存在しないファイルにコピーしません。

たとえば、現在のディレクトリにという名前のファイルがあり、1.epub拡張子を除いて同じファイル名を持つpdfファイルに変換したいと思います。 PDFファイルは1.pdfまだ存在しません。

$ ebook-convert *.{epub,pdf}

結果ファイルは*.pdf

Bashでは、まずepubファイルのデフォルト名を変数として抽出し、その変数の値を使用してpdfファイルの名前を指定する必要がありますか?

Bashや他のシェルにはよりエレガントなソリューションがありますか?

ベストアンサー1

シェル技術はループを使用します。

shとbashやzshなどの他のshのようなシェルから:

for f in *.epub; do
  ebook-convert -- "$f" "${f%.epub}.pdf"
done

zshでは、次のように短縮できます。

for f (*.epub(N)) ebook-convert -- $f $f:r.pdf

Nullglob glob修飾子は、一致するファイルがない場合でもエラーを防ぎます。 bashには対応する機能はありませんが、nullglobksh93で事前にオプションを設定することもできます。for f in ~(N)*.epub; do...

rename次のプログラムがインストールされている可能性があります。man 1 rename

おすすめ記事