Генерировать блоки кода в уценке, перебирая файлы - PullRequest
1 голос
/ 25 апреля 2019

Здравствуйте. Я пытаюсь cat содержимое файлов в каталоге и добавить их в файл уценки в виде блоков кода.

Я могу cat содержимое файлов в документе уценки, но не могу добавить обратные ссылки в файл уценки. Обратные метки не появляются в файле. Я могу получить обратные пометки для печати, если наберу printf "``" в своей оболочке, но не в следующем скрипте bash:

files=$(find . -name "*.h" -name "*.c" -maxdepth 1)

for i in $files;
do
    printf "\`\`" >> report.md
    cat $i >> report.md
    printf "\`\`" >> report.md
done


1 Ответ

2 голосов
/ 25 апреля 2019

Это 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...