Sử dụng lệnh find để chuyển đổi tập tin markdown thành html


17

Giả sử tôi có các tệp trên đĩa cứng có phần mở rộng là .md.

Tôi muốn chuyển đổi tất cả các tập tin .htmlthông qua find-exectùy chọn.

Lệnh để chuyển đổi một tập tin markdown thành html là

markdown readme.md > readme.html

Tôi đang cố gắng sử dụng một cái gì đó như:

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

Tất nhiên, những điều trên không hoạt động. Vì vậy, làm thế nào để tôi làm điều đó chỉ bằng cách sử dụng findexec?


Câu trả lời:


16

Bạn cần trích dẫn xung quanh cấu trúc có chứa >bởi vì đó là một ký tự đặc biệt vỏ, như thế này:

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

Điều này cũng sẽ đổi tên các tệp để bạn kết thúc foo.htmlthay vì foo.md.html:

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

Bạn không nhận được file.md.html ngay bây giờ? Thay vì file.html?
Bernhard

@rush Tại sao tôi cần {}ở cuối cả hai lệnh? Ngoài ra, trong lệnh thứ hai, thật khó để theo dõi tôi về những gì đã xảy ra? Tôi không hiểu ${0%.md}/.htmlphần này.
Abhijeet Rastogi

Btw, tôi vừa kiểm tra. bạn có thể viết gạch chéo về phía trước do nhầm lẫn trong ${0%.md}/.html.
Abhijeet Rastogi

@shadyabhi Cuối cùng {}là đối số đầu vào cho sh -cchuỗi và được truy cập dưới dạng $0. Lệnh bạn không hiểu dải .mdvà thêm .html. Bạn có thể đúng khi thoát khỏi.
Bernhard

@Bernhard Cảm ơn bạn đã trả lời. Thành thật mà nói, trước đó tôi cũng biết rằng đó là tước .mdvà thêm .htmlnhưng tôi muốn biết thêm về nó. Bạn có thể chuyển hướng tôi đến một wiki / doc giải thích điều này?
Abhijeet Rastogi

0

Cách để đạt được chính xác những gì bạn đã viết là để sử dụng markdown's -otùy chọn, trong đó nêu rõ tên của tập tin đầu ra, tức là

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

Làm theo cách này để tránh bắt đầu một shell mới chỉ để chạy markdown.

Thật không may, như Bernhard chỉ ra, làm theo cách này cung cấp cho bạn các tệp có tên file.md.htmlthay vì file.html, vì vậy cách tiếp cận của rush là thích hợp hơn ở đây.


1
Nhưng, markdownkhông có -otùy chọn. Tôi kiểm tra lại trước khi bình luận.
Abhijeet Rastogi

markdown (1) nói rằng nó có, nhưng có lẽ bạn có một phiên bản khác?
Mikel

1
Bạn cũng có thể sử dụng pandoc -f markdown -t html -o....
Mikel

Ồ, tôi đã sử dụng daredfireball.net/projects/markdown và nó không có điều đó.
Abhijeet Rastogi
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.