Iterar através de arquivos em um diretório específico

Iterar através de arquivos em um diretório específico

Ao tentar aprimorar um dos meus pacotes, me perguntei se é possível iterar pela lista de arquivos de um diretório no expl3 (li que l3interfaces.pdfo expl3 tem alguns recursos de IO, mas eles parecem incapazes de verificar diretórios).

O caso de uso é o seguinte: tenho um documento principal. Isto incluirá alguns arquivos especiais gerados com um aplicativo externo e armazenados em diretórios fora do caminho.

Então a questão é: como seria um expl3"scanner de diretório" (quero apenas especificar o diretório) ou preciso usar Lua para essa finalidade?

Responder1

expl3é escrito em tex, portanto é limitado às facilidades que o tex fornece, portanto você não pode fazer isso a menos que use -shell-escapeou luatex.

Por exemplo, isso irá compor uma lista de arquivos tex no diretório atual, se for isso que ls *.texgera em seu sistema operacional. (provavelmente dir *.texno 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}

Se eu executá-lo, recebo 105 páginas parecidas com

insira a descrição da imagem aqui

Responder2

Com o TeX Live 2017 será lançada uma versão aprimorada do TeXOSQuery, que também roda no shell restrito:

\documentclass{article}
\usepackage{texosquery}

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

\show\result

\stop

Isso produz

> \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.

Você pode então usar métodos padrão para dividir a \resultmacro em componentes.

Existem restrições sobre quais diretórios você pode acessar, por motivos de segurança, mas os diretórios filhos do diretório de trabalho devem ser seguros.

informação relacionada