Durchlaufen Sie die Dateien in einem bestimmten Verzeichnis

Durchlaufen Sie die Dateien in einem bestimmten Verzeichnis

Beim Versuch, eines meiner Pakete zu erweitern, habe ich mich gefragt, ob es möglich ist, die Dateiliste eines Verzeichnisses in expl3 zu durchlaufen (ich habe gelesen, l3interfaces.pdfdass expl3 über einige IO-Funktionen verfügt, diese scheinen jedoch nicht in der Lage zu sein, Verzeichnisse zu scannen).

Der Anwendungsfall ist folgender: Ich habe ein Hauptdokument. Dieses soll einige spezielle Dateien enthalten, die mit einer externen Anwendung erzeugt und in Verzeichnissen außerhalb des Pfades gespeichert wurden.

Die Frage ist also: Wie würde ein expl3„Verzeichnisscanner“ (ich möchte nur das Verzeichnis angeben) aussehen oder muss ich hierfür Lua verwenden?

Antwort1

expl3ist in Tex geschrieben und daher auf die von Tex bereitgestellten Funktionen beschränkt. Sie können dies daher nur tun, wenn Sie -shell-escapeoder luatex verwenden.

Dies wird beispielsweise eine Liste von Tex-Dateien im aktuellen Verzeichnis setzen, wenn dies ls *.texin Ihrem Betriebssystem generiert wird. (wahrscheinlich dir *.texunter 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}

Wenn ich es ausführe, bekomme ich 105 Seiten, die aussehen wie

Bildbeschreibung hier eingeben

Antwort2

Mit TeX Live 2017 wird eine erweiterte Version von TeXOSQuery ausgeliefert, die auch in der eingeschränkten Shell läuft:

\documentclass{article}
\usepackage{texosquery}

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

\show\result

\stop

Dies gibt

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

Sie können dann Standardmethoden zum Aufteilen des \resultMakros in Komponenten verwenden.

Aus Sicherheitsgründen gibt es Einschränkungen hinsichtlich der Verzeichnisse, auf die Sie zugreifen können, aber untergeordnete Verzeichnisse des Arbeitsverzeichnisses sollten sicher sein.

verwandte Informationen