Shellscript для печати дерева каталогов и содержимого файлов с хорошей презентацией

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

Древовидное дерево работает как шарм, но я понятия не имею, как заставить печатать сценарии для работы.

Код до сих пор:

#!/bin/bash # Script to export directory with pdflatex # Generate .tex file # Directory Listing echo "\documentclass[11pt,a4paper,oneside]{article}" > tmp.tex echo "\usepackage{fullpage}" >> tmp.tex echo "\begin{document}" >> tmp.tex echo "\section{Listing}" >> tmp.tex echo "\begin{verbatim}" >> tmp.tex tree $1 >> tmp.tex echo "\end{verbatim}" >> tmp.tex echo "\end{document}" >> tmp.tex # ShellScript printout ??????? # Generate .pdf file pdflatex tmp.tex #Cleanup rm tmp.tex 

2 Solutions collect form web for “Shellscript для печати дерева каталогов и содержимого файлов с хорошей презентацией”

Довольно печатать дерево каталогов и содержимое файлов сценариев

Изменить : более новая версия с полной таблицей содержимого как поддержка дерева и изображения, во второй части.

Использование \verbatiminput из пакета verbatim .

Как это:

 #!/bin/bash tempfile=$(mktemp /tmp/dirtree-XXXXX.tex) trap "rm $tempfile" 0 1 2 3 6 9 15 cat <<EOF >$tempfile \documentclass[11pt,a4paper,oneside]{article} \usepackage{fullpage,verbatim,dirtree} \begin{document} \section{Listing} \dirtree{% EOF export -a scriptList=() while IFS=/ read -a fPath ;do file="${fPath[*]:${#fPath[*]}-1}" IFS=/ full="${fPath[*]}" type="$(file -b "$full")" echo .${#fPath[@]} "${file//_/\\_}\DTcomment{$type}. " [[ "$type" =~ script.text ]] && scriptList=("${scriptList[@]}" "$full") done < <( find $1 -type d -o -type f ) >>$tempfile export IFS=$'\n\t ' echo "}" >>$tempfile for file in "${scriptList[@]}";do name="${file##*/}" printf "\\section{%s}\n{\\\\scriptsize\\\\verbatiminput{%s}}\n" \ "${name//_/\_}" "${file}" >>"${tempfile}" done echo >>"${tempfile}" '\end{document}' pdflatex -interaction nonstopmode "${tempfile}" 

Кто будет производить такую ​​продукцию:

распечатать содержимое каталога

Довольно печатать дерево каталогов с таблицей содержимого, скриптами и файлами изображений.

NOTA: для вычисления toc latex должен запускаться два раза.

Ошибки :

Этот сценарий является лишь доказательством концепции , тип изображений, вероятно, ограничен и может быть улучшен, в конечном итоге с помощью imagemagik , netpbm или любой графической библиотеки … и так далее

todo :

  • фиксировать размеры изображений
  • улучшать фильтрацию изображений
  • добавьте поддержку для pdf, ps и, возможно, других печатаемых, таких как .man, .tex, .sgml, .odf
    • добавить опцию для печати первой страницы файлов документов.
  • сделать и очистить временные файлы более правильно.

Вот он:

 #!/bin/bash tempfile=$(mktemp /tmp/dirtree-XXXXX.tex) # trap "rm $tempfile" 0 1 2 3 6 9 15 cat <<EOF >$tempfile \documentclass[11pt,a4paper,oneside]{article} \usepackage{fullpage,graphicx,verbatim,dirtree} \makeatletter \newcommand{\typePPage}[2]{\DTcomment{{\scriptsize #1 \begin{minipage}[t]{5em}\mbox{}\hfill\ifx\@empty#2\else% s.$\ref{sec:#2}$, p.$\pageref{sec:#2}$\fi\end{minipage}}}} \makeatother \begin{document}\parindent=0pt% \section{Listing} \dirtree{% EOF export -a scriptList=() export -A typelist=() while IFS=/ read -a fPath ;do file="${fPath[*]:${#fPath[*]}-1}" IFS=/ full="${fPath[*]}" type="$(file -b "$full")" if [[ "$type" =~ script.text ]] || [[ "$type" =~ image ]] ;then scriptList=("${scriptList[@]}" "$full") typelist["${full//\//_}"]="$type" echo .${#fPath[@]} \ "${file//_/\\_}\typePPage{$type}{${file//[\/.+()_-]/}}. " else echo .${#fPath[@]} "${file//_/\\_}\typePPage{$type}{}. " fi done < <( find $1 -type d -o -type f ) >>$tempfile export IFS=$'\n\t ' echo "}" >>$tempfile for file in "${scriptList[@]}";do name="${file##*/}" printf '\\section{%s}\n\\label{sec:%s}\n' \ "${name//_/\_}" "${name//[\/.+()_-]/}" if [[ "${typelist["${file//\//_}"]}" =~ script.text ]];then printf '{\\scriptsize\\verbatiminput{%s}}\n' "${file}" else printf '\\includegraphics[width=\\textwidth]{%s}\n' "${file}" fi done >>"${tempfile}" echo >>"${tempfile}" '\end{document}' pdflatex -interaction nonstopmode "${tempfile}" >/dev/null 2>&1 pdflatex -interaction nonstopmode "${tempfile}" -страницы #!/bin/bash tempfile=$(mktemp /tmp/dirtree-XXXXX.tex) # trap "rm $tempfile" 0 1 2 3 6 9 15 cat <<EOF >$tempfile \documentclass[11pt,a4paper,oneside]{article} \usepackage{fullpage,graphicx,verbatim,dirtree} \makeatletter \newcommand{\typePPage}[2]{\DTcomment{{\scriptsize #1 \begin{minipage}[t]{5em}\mbox{}\hfill\ifx\@empty#2\else% s.$\ref{sec:#2}$, p.$\pageref{sec:#2}$\fi\end{minipage}}}} \makeatother \begin{document}\parindent=0pt% \section{Listing} \dirtree{% EOF export -a scriptList=() export -A typelist=() while IFS=/ read -a fPath ;do file="${fPath[*]:${#fPath[*]}-1}" IFS=/ full="${fPath[*]}" type="$(file -b "$full")" if [[ "$type" =~ script.text ]] || [[ "$type" =~ image ]] ;then scriptList=("${scriptList[@]}" "$full") typelist["${full//\//_}"]="$type" echo .${#fPath[@]} \ "${file//_/\\_}\typePPage{$type}{${file//[\/.+()_-]/}}. " else echo .${#fPath[@]} "${file//_/\\_}\typePPage{$type}{}. " fi done < <( find $1 -type d -o -type f ) >>$tempfile export IFS=$'\n\t ' echo "}" >>$tempfile for file in "${scriptList[@]}";do name="${file##*/}" printf '\\section{%s}\n\\label{sec:%s}\n' \ "${name//_/\_}" "${name//[\/.+()_-]/}" if [[ "${typelist["${file//\//_}"]}" =~ script.text ]];then printf '{\\scriptsize\\verbatiminput{%s}}\n' "${file}" else printf '\\includegraphics[width=\\textwidth]{%s}\n' "${file}" fi done >>"${tempfile}" echo >>"${tempfile}" '\end{document}' pdflatex -interaction nonstopmode "${tempfile}" >/dev/null 2>&1 pdflatex -interaction nonstopmode "${tempfile}" 

Не удалось создать:

Образец вывода

Мне не совсем понятно, что вы хотите, но, как я понимаю, вы хотите, чтобы все файлы .sh напечатаны в tmp.tex. Тогда вы можете сделать что-то вроде

 find -name "*.sh" -exec cat "{}" + >> tmp.tex 

Которые объединяют все файлы .sh , а затем добавляются в tmp.tex .

  • foomatic-configure создает странные предупреждения perl
  • lp & Epson WF: задано качество печати
  • Как я могу заставить HP Deskjet F4210 работать?
  • Конфигурация чашек не учитывает мой новый драйвер PPD (Debian Wheezy)
  • Прекратить работу принтера с терминала
  • Список всех сетевых принтеров (в том числе не установленных)
  • Управление стандартным принтером пользователей в качестве администратора
  • Нужно ли клиентам CUPS устанавливать драйверы локально?
  • Сканер Lexmark S305 / принтер
  • Назначить статический IP-адрес для принтера, подключенного к RJ45
  • Как отлаживать чашки и самбу? LaserJet Professional P1102w не печатает "фильтр не работает"
  • Interesting Posts

    Как я могу получить информацию о удаленных каталогах, установленных через sshfs?

    Что происходит, когда я убиваю ‘cp’? Это безопасно и имеет ли это какие-либо последствия?

    Есть ли команда для перечисления сжатых размеров файлов для файлов в .zip-файле?

    Изменение размера luks зашифрованного раздела для заполнения свободного места

    Половина окна в одном рабочем пространстве, а другая половина в другом

    Некоторые иконки разбиты в меню приложения

    Совпадение шаблонов находит равным или меньше, чем использование регулярного выражения в awk

    Общая память уменьшилась при увеличении файла подкачки?

    Могу ли я создать пакет centos 7 (el7) rpm на сервере centos 6 (el6)?

    Восстановление данных из разбитого (NTFS) раздела

    Как этот awk выравнивает интервал?

    преобразование пространств в тире

    Назначение IP-адреса переменной окружения

    ПРЕДУПРЕЖДЕНИЕ: в kernel / irq / handle.c – после смены rootfs, но почему?

    Может ли MD справиться с списком badblock?

    Linux и Unix - лучшая ОС в мире.