Iterar a través de archivos en un directorio específico

Iterar a través de archivos en un directorio específico

Mientras intentaba mejorar uno de mis paquetes, me preguntaba si es posible iterar a través de la lista de archivos de un directorio en expl3 (leí que l3interfaces.pdfexpl3 tiene algunas funciones de E/S, pero parece que no pueden escanear directorios).

El caso de uso es el siguiente: tengo un documento principal. Esto incluirá algunos archivos especiales generados con una aplicación externa y almacenados en directorios fuera de la ruta.

Entonces la pregunta es: ¿Cómo se expl3vería un "escáner de directorios" (solo quiero especificar el directorio) o tengo que usar Lua para este propósito?

Respuesta1

expl3está escrito en tex, por lo que se limita a las instalaciones que proporciona tex, por lo que no puede hacer esto a menos que use -shell-escapeluatex.

Por ejemplo, esto escribirá una lista de archivos tex en el directorio actual si eso es lo que ls *.texse genera en su sistema operativo. (probablemente dir *.texen 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}

Si lo ejecuto obtengo 105 páginas que parecen

ingrese la descripción de la imagen aquí

Respuesta2

Con TeX Live 2017 se enviará una versión mejorada de TeXOSQuery, que también se ejecuta en el shell restringido:

\documentclass{article}
\usepackage{texosquery}

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

\show\result

\stop

Esto produce

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

Luego puede utilizar métodos estándar para dividir la \resultmacro en componentes.

Existen restricciones sobre a qué directorios puede acceder, por razones de seguridad, pero los directorios secundarios del directorio de trabajo deben ser seguros.

información relacionada