Преобразование нескольких файлов разметки в нескольких каталогах в HTML с помощью скрипта - PullRequest
2 голосов
/ 14 декабря 2011

В настоящее время у меня есть большой большой каталог, заполненный множеством подкаталогов с одинаковыми именами файлов уценки в каждом:

/big-directory/sub-directory-name-1/sub-directory-name-1.md

/big-directory/sub-directory-name-2/sub-directory-name-2.md

/big-directory/sub-directory-name-3/sub-directory-name-3.md

Я бы хотел закончить с этим:

/big-directory/sub-directory-name-1/sub-directory-name-1.md
/big-directory/sub-directory-name-1/index.html

/big-directory/sub-directory-name-2/sub-directory-name-2.md
/big-directory/sub-directory-name-1/index.html

/big-directory/sub-directory-name-3/sub-directory-name-3.md
/big-directory/sub-directory-name-1/index.html

Я пытаюсь написать сценарий оболочки для OS X, который будет запускать multimarkdown для каждого файла, но мне сложно понять, как заставить цикл работать над подкаталогами, не помещая их все вручную в сценарий. Заранее спасибо за любую помощь.

Ответы [ 2 ]

2 голосов
/ 14 декабря 2011

Чтобы получить список всех листовых каталогов ниже / big-directory, вы можете использовать ответ в этот вопрос .

Затем вы можете построить цикл while, например так:

find /big-directory -type d | sort | awk '$0 !~ last {print last} {last=$0} END {print last}' | while read dir
do
    # Do something useful with $dir
    echo $dir
done

Это должно дать вам отправную точку.

0 голосов
/ 16 января 2015

Я столкнулся с той же проблемой. Прочитав этот и несколько других вопросов, а также много проб и ошибок, я нашел следующее решение:

#!/bin/bash
for dir in `find /big-directory -type d`
do
  if [ -e $dir/file.md ]; #test if dir contains file
  then
    echo "converting $dir/file.md to HTML..."
    markdown $dir/file.md > $dir/file.html
  fi
done

Я знаю, что не обязательно проверять, существует ли файл, но в противном случае скрипт будет выдавать ошибку каждый раз, когда находит каталог, в котором нет этого файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...