Gunakan perintah find untuk mengonversi file penurunan harga ke html

17

Misalkan saya punya file di harddisk saya yang memiliki ekstensi sebagai .md.

Saya ingin mengkonversi semua file-file ke .htmlmelalui finddan -execpilihan.

Perintah untuk mengonversi file penurunan harga ke html adalah

markdown readme.md > readme.html

Saya mencoba menggunakan sesuatu seperti:

find / -name "*.md" -type f -exec markdown {} > {}.html \;

Tentu saja, hal di atas tidak berhasil. Jadi, bagaimana saya melakukannya hanya dengan menggunakan finddan exec?

Abhijeet Rastogi
sumber

Jawaban:

16

Anda perlu mengutip sekitar konstruk yang mengandung >karena karakter khusus shell, seperti ini:

find / -name "*.md" -type f -exec sh -c 'markdown "$0" > "$0.html"' {} \;

Ini juga akan mengganti nama file sehingga Anda berakhir dengan foo.htmlalih - alih foo.md.html:

find / -name "*.md" -type f -exec sh -c 'markdown "${0}" > "${0%.md}.html"' {} \;
buru-buru
sumber
Apakah Anda tidak mendapatkan file.md.html sekarang? Alih-alih file.html?
Bernhard
@ bergegas Mengapa saya perlu {}di akhir di kedua perintah? Juga, dalam perintah kedua, sulit untuk mengikuti bagi saya tentang apa yang terjadi? Saya tidak mengerti ${0%.md}/.htmlbagian itu.
Abhijeet Rastogi
Btw, saya baru saja memeriksa. Anda mungkin menulis forward slash secara tidak sengaja di ${0%.md}/.html.
Abhijeet Rastogi
@shadyabhi Final {}adalah argumen input untuk sh -cstring, dan apakah diakses sebagai $0. Perintah yang Anda tidak mengerti strip .mddan menambahkan .html. Anda mungkin benar dengan lolos dari.
Bernhard
@Bernhard Terima kasih atas balasan Anda. Jujur, saya tahu sebelumnya juga bahwa itu stripping .mddan menambahkan .htmltetapi saya ingin tahu lebih banyak tentang hal itu. Bisakah Anda mengarahkan saya ke wiki / doc yang menjelaskan hal ini?
Abhijeet Rastogi
0

Cara untuk mencapai apa yang telah Anda tulis adalah untuk penggunaan markdown's -opilihan, yang menentukan nama file output, yaitu

find / -name "*.md" -type f -exec markdown -o {}.html {} \;

Melakukannya dengan cara ini menghindari memulai shell baru hanya untuk menjalankan penurunan harga.

Sayangnya, seperti yang ditunjukkan Bernhard, melakukannya dengan cara ini memberi Anda file yang dinamai file.md.htmlbukan file.html, jadi pendekatan terburu-buru lebih tepat di sini.

Mikel
sumber
1
Tapi, markdowntidak punya -opilihan. Saya memeriksa ulang sebelum berkomentar.
Abhijeet Rastogi
penurunan harga (1) mengatakan itu, tetapi mungkin Anda memiliki versi yang berbeda?
Mikel
1
Anda juga bisa menggunakannya pandoc -f markdown -t html -o....
Mikel
Ohk, saya menggunakan daringfireball.net/projects/markdown dan tidak memilikinya.
Abhijeet Rastogi