# Iterate over files and convert with a new name / directory

I'm pretty new to bash scripting. I want a script that I can run in a directory that contains .md files, runs pandoc on them, and delivers the output to a sibling folder html, i.e. my folder structure is like this:

.
├── html
└── md


Here is what I have working, I just don't know if I'm following good practices or if there's a nicer / more readable way of doing what I'm doing.

#! /bin/bash
# run this from a folder containing markdown files
# it delivers html to the sibling html folder
if hash pandoc 2>/dev/null; then
for file in ./*.md ; do
echo Converting $file cat "$file" | pandoc -o "$(echo$file | sed 's/^./..\/html/' |  sed 's/.md$/.html/')" done else echo "I need pandoc installed" fi  ## 1 Answer • UUOC. pandoc takes the input file name as an argument. echo$file | pandoc -o outfile is equivalent to pandoc -o outfile $file. One process invocation down. • UUOS (sed in this case). bash has very rich string transformation features built in. For example, ${file%md} (see Parameter expansion section of man bash) will strip the md suffix form the filename. So consider

for file in *.md; do
pandoc -o ../html/${file%md}html done  Two more process invocations down. • If by any chance an .md filename contains funny characters (like whitespace), the substitution will produce unexpected results. It is safer to use double quotes, as in "${....}".

PS: It might be beneficial to abandon the shell script altogether in favor of make, with a Makefile having a single stem rule

../html/%.html: %.md
pandoc -o $@$<
`
• Awesome thank you! My workplace actually has an award for UUOC, I think I'll need to apply for it :) – russau Nov 17 '18 at 20:44
• Thanks again for your help. My script has evolved a bit since I asked the original question. Interested to know if there's a nicer way to pass an optional parameter to pandoc. – russau Nov 17 '18 at 20:51
• If you've got a new version of the code it is time for a new code review. It is ok to open a new question on here with modified code. It is nice to link to the previous question too. – chicks Nov 18 '18 at 2:20