Batch mengonversi file sambil mempertahankan nama

2

Saya ingin menggunakan perintah berikut untuk mengubah ebooks dari format epub ke format mobi: calibre-convert books/*.epub books/*.mobi

tetapi saya ingin mempertahankan nama file yang sama untuk semua file. Jadi book1.epub akan membuat book1.mobi book2.epub akan membuat book2.mobi setelah konversi. apakah ini bisa dilakukan di baris perintah? atau apakah saya harus menulis skrip bash?

Tlink
sumber

Jawaban:

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

Trik utama di sini adalah ${file%epub} yang berarti " $file dengan epub di akhir dihapus ". Dengan cara ini ${file%epub}mobi menerjemahkan ekstensi.

Subkulit ( (…) ) digunakan begitu

  • direktori kerja shell utama saat ini tetap utuh
  • dan file variabel di shell utama tidak berubah.

Direktori apa pun yang cocok *.epub di books/ akan diteruskan ke calibre-convert demikian juga. Terserah alat apa yang akan dilakukan dengan direktori. Anda mungkin tidak memiliki direktori seperti itu di sana; tetapi jika Anda melakukannya, berhati-hatilah.

Catatan: Saya tidak tahu calibre-convert sama sekali; sintaks dalam perintah saya hanya diturunkan dari perintah Anda.

Kamil Maciorowski
sumber
Terima kasih atas jawabannya, saya berharap dapat memilihnya, tetapi saya tidak memiliki reputasi yang cukup.
Tlink
Apakah sub-shell hanya menghindari memiliki cd menjadi permanen?
Xen2050
Apakah saya harus menambahkan sesuatu untuk membuat perintah bekerja secara rekursif pada sub folder? temukan ~ / book -name '* .epub' -exec ...........?
Tlink
1
@Tautan Adalah mungkin untuk melakukan ini secara rekursif find atau dengan ** (setelah shopt -s globstar di Bash). Catatan formal: contoh dalam pertanyaan Anda tidak rekursif dan jawaban saya menjaga semuanya tetap seperti ini. Mengubah pertanyaan secara substansial setelah jawaban apa pun dipublikasikan (dan dibenarkan, dan bahkan diterima oleh Anda) bukanlah praktik yang baik di sini. Menurut pendapat saya, pertanyaan yang terpisah akan baik, di mana Anda secara eksplisit meminta solusi rekursif (mungkin tautan ke pertanyaan ini untuk memberikan konteks, tetapi meskipun demikian pertanyaan baru itu harus berdiri sendiri).
Kamil Maciorowski
1
@Tautan, Anda tetap harus menerima jawabannya, alih-alih hanya memutarnya
George M