遍历特定目录中的文件

遍历特定目录中的文件

在尝试增强我的一个包时,我想知道是否可以在 expl3 中迭代目录的文件列表(我读到l3interfaces.pdfexpl3 有一些 IO 功能,但它们似乎无法扫描目录)。

用例如下:我有一个主文档。这将包括一些使用外部应用程序生成并存储在路径之外的目录中的特殊文件。

所以问题是:expl3“目录扫描器”(我只想指定目录)是什么样子的,或者我是否必须为此使用 Lua?

答案1

expl3-shell-escape是用 tex 编写的,因此仅限于 tex 提供的功能,所以除非您使用或 luatex,否则您无法执行此操作 。

ls *.tex例如,如果这是在您的操作系统中生成的,这将在当前目录中排版 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,该版本也可以在受限 shell 中运行:

\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宏拆分为组件。

出于安全原因,对您可以访问的目录有限制,但工作目录的子目录应该是安全的。

相关内容