Bash 交织两个通配符命令

Bash 交织两个通配符命令,bash,unix,Bash,Unix,我对unixshell非常陌生,需要您的帮助 我有一个脚本,可以生成我的C++项目的很多.TEX文件,比如: a、 h.tex a.cpp.tex b.h.tex b.cpp.tex。。。等等 然后,我在所有文件上运行pdflatex,并使用以下方法将结果文件合并为一个文件: pdftk *.pdf cat output merged_code.pdf 这很管用,但通配符按字母顺序匹配文件,因此我希望在头文件之后有cpp文件,而最后是cpp文件。我想把我的主文件放在最后(或开始),因此: a、

我对unixshell非常陌生,需要您的帮助

<>我有一个脚本,可以生成我的C++项目的很多.TEX文件,比如: a、 h.tex a.cpp.tex b.h.tex b.cpp.tex。。。等等

然后,我在所有文件上运行pdflatex,并使用以下方法将结果文件合并为一个文件:

pdftk *.pdf cat output merged_code.pdf
这很管用,但通配符按字母顺序匹配文件,因此我希望在头文件之后有cpp文件,而最后是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
shopt-s extglob

粘贴-d'\n',您的粘贴尝试非常接近。我认为问题在于粘贴需要行,而不是将输入拆分为行

试试这个:

$ 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
$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$(粘贴您希望先粘贴所有*.h,然后粘贴所有*.cpp,然后粘贴main.cpp?还是先粘贴一对.h和.cpp,然后粘贴下一对.h和.cpp?我希望先粘贴一对.h和.cpp,然后粘贴下一对。非常感谢您的回答!它也很有效,但我最终还是接受了jaba的,因为它离我的太近了,我先检查了它。对不起关于这一点,@noctilux不必担心。不过,为了完整起见,应该指出,在名称中包含空格/等的文件面前,这两种解决方案都不安全。
shopt -s extglob
echo $(paste <(ls *.h.pdf) <(ls !(main).cpp.pdf 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