我是unix shell的新手,可以真正使用你的帮助!
我有一个脚本可以生成很多我的C ++项目的.tex文件,如下所示:
a.h.tex a.cpp.tex b.h.tex b.cpp.tex ... etc。
然后我在所有这些上运行pdflatex并使用以下结果将结果文件合并为:
pdftk *.pdf cat output merged_code.pdf
这很好但是通配符按字母顺序匹配文件,所以当我想在它们之后使用它们时,我最终会在头文件之前使用cpp文件。我想把我的主文件放在最后(或开始),所以:
a.h.pdf然后a.cpp.pdf然后b.h.pdf然后b.cpp.pdf ... main.cpp.pdf
而不是
a.cpp.pdf然后a.h.pdf然后b.cpp.pdf然后b.h.pdf ... main.cpp.pdf ...
我做了很多研究,试图像这样插入ls的输出:
shopt -s extglob
paste -d '\n', <(ls *.h.pdf) <(!(main).cpp.pdf
作为输入,但虽然它看起来很有前途,但它最终没有用,所以我非常感谢任何帮助!
答案 0 :(得分:3)
shopt -s extglob
echo $(paste <(ls *.h.pdf) <(ls !(main).cpp.pdf main*))
我会说你自己找到了答案。我几乎只是在您的示例中使用了代码并添加了main*
给你的信用。
$ ls
a.cpp.pdf a.h.pdf b.cpp.pdf b.h.pdf main.cpp.pdf
$ echo $(paste <(ls *.h.pdf) <(ls !(main).cpp.pdf main*))
a.h.pdf a.cpp.pdf b.h.pdf b.cpp.pdf main.cpp.pdf
答案 1 :(得分:2)
您的粘贴尝试非常接近。我认为问题只是粘贴需要线条而你没有将输入分成线条。
试试这个:
$ ls
a.cpp.pdf b.h.pdf d.cpp.pdf r.cpp.pdf s.h.pdf
a.h.pdf c.cpp.pdf d.h.pdf r.h.pdf t.cpp.pdf
b.cpp.pdf c.h.pdf main.cpp.pdf s.cpp.pdf t.h.pdf
$ echo $(paste <(echo *.h.pdf | tr ' ' '\n') <(echo !(main*).cpp.pdf | tr ' ' '\n')) main.pdf
a.h.pdf a.cpp.pdf b.h.pdf b.cpp.pdf c.h.pdf c.cpp.pdf d.h.pdf d.cpp.pdf r.h.pdf r.cpp.pdf s.h.pdf s.cpp.pdf t.h.pdf t.cpp.pdf main.pdf