Это find
утверждение на самом деле ничего не найдет. Нет файлов с именами *.h
и *.c
. Вам нужно -o
для или :
find . -maxdepth 1 '(' -name "*.h" -o -name "*.c" ')'
Обратные метки должны быть в выходном файле, без причины, что они не будут. Тем не менее, вы имеете в виду иметь 3 из них? Обычно Markdown использует 3 для блоков кода. Вероятно, они также должны быть в отдельных строках.
for i in $files; do
echo '```' >> report.md
cat $i >> report.md
echo '```' >> report.md
done
Вы можете перенаправить вывод всего цикла сразу.
for file in $files; do
echo '```'
cat "$file"
echo '```'
done > report.md
Для дополнительной надежности я бы предложил использовать find -exec
для выполнения действий с каждым файлом. Таким образом, имена файлов с пробелами и другими странными символами не запутают сценарий.
find . -maxdepth 1 '(' -name "*.h" -o -name "*.c" ')' \
-exec echo '```' ';' -exec cat {} ';' -exec echo '```' ';' > report.md
Или вы можете вообще пропустить find
и просто перебрать нужные файлы. Это также безопасно перед пробелами:
for file in *.h *.c; do
echo '```'
cat "$file"
echo '```'
done > report.md