2

当我写一个 Latex 文件时,有时我需要删除它编译生成的所有文件,只保留.tex文件。例如,我想删除以下所有文件:

paper-stack.log
paper-stack.blg
paper-stack.bbl
paper-stack.aux
paper-stack.pdf

并保留以下文件:

paper-stack.tex

除此之外,我想删除 using bash regexp。我记得我以前做过,但现在我对使用其他 shell 后的正则表达式模式感到困惑。有点像,rm paper-stack.[!tex]但我不确定元字符[和.]!

4

3 回答 3

3

如果你已经完成了,shopt extglob那么你可以说类似

rm paper-stack.!(tex)

(与往常一样,在使用rm或使用其他可能具有破坏性的命令时,最好echo先进行测试。)不过,我会更明确地说明要删除的内容,只是根据一般原则。

于 2012-04-13T01:46:45.083 回答
2

创建 a 的好处之一Makefile是它可以在必要时帮助多次运行 LaTeX;这取自Makefile保持技术文档最新的产品:

techdoc.pdf: techdoc.tex
        while pdflatex $< ${BUILD_OUTPUT} || exit 1 ; \
                grep -q "Label(s) may have changed" techdoc.log; \
        do :; done

这样,仅运行make(如果这是 中的第一个目标Makefile)将techdoc.pdf根据需要多次重建,以确保正确更新引用和标签。(这通常只是两次,有时可能是三倍,而且我听说聪明的人可以输入导致这样的循环永远不会终止 - 但我从未见过。)

一旦你有了这样的东西,继续前进就是小菜一碟:

.PHONY: clean

clean: techdoc.log techdoc.bbl techdoc.aux techdoc.blg
        rm $?

请参阅http://www.gnu.org/software/make/manual/make.html#Special-Variables以解释 GNU Make 中可用的$?$@和类似的速记变量。

于 2012-04-13T02:08:44.767 回答
1

我认为您可以使用命令 find 到您想要的目录并删除它们。类似于以下内容。但是考虑一下 sarnold 的建议,将命令放在 makefile 中的某个位置。

find my/dir/ -name "*.log" -or -name ".aux" -exec rm '{}' \;
于 2012-04-13T01:49:48.527 回答