Supposons que j'ai des files sur mon disque dur ayant des extensions comme .md
.
Je veux convertir tous ces files en .html
via find
et l'option -exec
.
La command pour convertir un file de démarque en html est
markdown readme.md > readme.html
J'essaie d'utiliser quelque chose comme:
find / -name "*.md" -type f -exec markdown {} > {}.html \;
Bien sûr, ce qui précède ne fonctionne pas. Alors, comment puis-je faire cela en utilisant seulement find
et exec
?
Vous devez citer autour de la construction contenant >
car c'est un caractère spécial shell, comme ceci:
find / -name "*.md" -type f -exec sh -c 'markdown "$0" > "$0.html"' {} \;
Cela permettra également de renommer les files afin que vous vous foo.html
avec foo.html
au lieu de foo.md.html
:
find / -name "*.md" -type f -exec sh -c 'markdown "${0}" > "${0%.md}.html"' {} \;
La façon de réaliser exactement ce que vous avez écrit est d'utiliser l'option -o
markdown
, qui spécifie le nom du file de sortie, c'est-à-dire
find / -name "*.md" -type f -exec markdown -o {}.html {} \;
Le faire de cette façon évite de démarrer un nouveau shell juste pour exécuter démarque.
Malheureusement, comme le souligne Bernhard, le faire de cette façon vous donne des files nommés file.md.html
au lieu de file.html
, donc l'approche de rush est plus appropriée ici.