Перебрать файлы в указанном каталоге

Перебрать файлы в указанном каталоге

Пытаясь улучшить один из своих пакетов, я задался вопросом, возможно ли выполнить итерацию по списку файлов каталога в expl3 (я читал, l3interfaces.pdfчто в expl3 есть некоторые возможности ввода-вывода, но они, похоже, не могут сканировать каталоги).

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

Итак, вопрос: как будет expl3выглядеть «сканер каталогов» (я хочу только указать каталог) или мне придется использовать Lua для этой цели?

решение1

expl3написан на tex, поэтому ограничен возможностями, предоставляемыми tex, поэтому вы не сможете этого сделать, если не используете -shell-escapeили luatex.

Например, это позволит набрать список tex-файлов в текущем каталоге, если это то, что ls *.texгенерируется в вашей операционной системе. (вероятно, dir *.texв Windows)

\documentclass{article}

\newread\zzz

\begin{document}

\def\zzpar{\par}

\openin\zzz="|ls *tex"
\loop
\read\zzz to \tmp
\ifx\tmp\zzpar\else
\par[\expandafter\detokenize\expandafter{\tmp}]%
\fi
\ifeof\zzz\else
\repeat

\end{document}

Если я запущу его, то получу 105 страниц, которые будут выглядеть так:

введите описание изображения здесь

решение2

Вместе с TeX Live 2017 будет поставляться улучшенная версия TeXOSQuery, которая также работает в ограниченной оболочке:

\documentclass{article}
\usepackage{texosquery}

\TeXOSQuery{\result}{-i ; .}

\show\result

\stop

Это выводит

> \result=macro:
->dl.log;dl.tex;install-tl;LICENSE.CTAN;LICENSE.TL;osq.log;osq.tex;qrp.log;qrp.
pdf;qrp.tex;query.aux;query.log;query.pdf;query.tex;rand.log;rand.pdf;rand.tex;
release-texlive.txt;texmf-dist;texnician.log;texnician.tex;texosquery.cfg;texpu
t.log;tlpkg;tt.aux;tt.idx;tt.ilg;tt.ind;tt.log;tt.pdf;tt.tex.

Затем можно использовать стандартные методы разбиения \resultмакроса на компоненты.

По соображениям безопасности существуют ограничения на то, к каким каталогам вы можете получить доступ, но дочерние каталоги рабочего каталога должны быть безопасными.

Связанный контент