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 .

  • Как препроцитировать CUPS 'lp` со сценарием для конкретного принтера?
  • Shellshock - не уязвим с версией bash 4.1?
  • Как выполнить действие ссылки печати LaTeX в Linux Adobe?
  • Ricoh Aficio SP 100su E
  • Список всех сетевых принтеров (в том числе не установленных)
  • чашки перезапускаются автоматически
  • проблема с печатью: одна страница на ПК печатает на нескольких страницах
  • foomatic-configure создает странные предупреждения perl
  • Прекратить работу принтера с терминала
  • Конфигурация чашек не учитывает мой новый драйвер PPD (Debian Wheezy)
  • Могут ли (CUPS) файлы ppd для Mac OS X использоваться для Linux?
  • Interesting Posts

    Разрешить www-data выполнять определенные команды

    Устройства USB отсутствуют в / proc / acpi / wakeup

    Исходное синтаксическое объяснение переменных в bashrc

    Какой пользователь (www-data или vagrant) запускает приложение Laravel в виртуальном сервере Homestead?

    Переключить сенсорные кнопки независимо от сенсорной панели

    Как выйти или отменить команду bad bash?

    Оптимизация для SSD?

    Как узнать, сжат ли файл PDF или нет, и (un) сжать его

    Будет ли сторонний композитинг с Gnome 3, или он будет ограничен?

    Понимание inotifywait, труб и буферов

    Список файлов в каталоге с определенным расширением

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

    Запускать скрипт каждые 30 минут с помощью systemd

    Есть ли способ развернуть программное обеспечение виртуальной машины через командную строку на centos3

    Каков предпочтительный способ использования низких номеров портов в Linux?

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