Как использовать вывод ls/grep в качестве входных данных для pdfunite?

Как использовать вывод ls/grep в качестве входных данных для pdfunite?

Я хочу использовать pdfunite для объединения нескольких pdf-файлов в один выходной файл. Поскольку каталог содержит много разного материала, я подумал, что могу использовать ls/grep для получения соответствующих имен файлов, а затем использовать pdfunite для объединения. Вывод ls/grep выглядит следующим образом:

ls | grep "handout...pdf" 
handout01.pdf*
handout02.pdf*
handout03.pdf*
handout04.pdf*
handout05.pdf*
handout06.pdf*

Затем я хочу вызвать pdfunit, который имеет следующий синтаксис:

 pdfunite [options] PDF-sourcefile1..PDF-sourcefilen PDF-destfile

Моя проблема в том, что, похоже, я не могу передать вывод ls/grep в pdfunite, потому что он не должен так работать. С другой стороны, если я попробую:

pdfunite ls | grep "handout...pdf" grep.pdf

то grep, очевидно, жалуется на мой выбранный выходной файл:

grep: grep.pdf: No such file or directory

Я знаю, что могу сделать два отдельных шага, и тогда это сработает, но мне хотелось бы понять, как сделать это одной строкой.

решение1

Если ваши шаблоны файлов настолько просты, то вам не нужно регулярное выражение, и вы можете использовать простой подстановочный знак:

pdfunite handout??.pdf

В противном случае вы можете использовать регулярное выражение с findкомандой и -regex, но я не смог найти способ выполнить его, который не имеет возможности разделения на несколько групп файлов. Некоторые из способов, которые вы можете сделать, также зависят от того, чтобы ни одно из имен файлов не содержало пробелов.

решение2

Я думаю, что для этого можно использовать символ "галочка" (то, что над тильдой). Попробуйте что-то вроде этого:

pdfunite [options] `ls | grep "handout...pdf"`

Насколько я понимаю, это то, как вы вкладываете команду. Все, что находится внутри тактов, выполняется как собственная команда, и ее вывод заменяет такты. Таким образом, команда выше по сути будет эквивалентна

pdfunite [options] handout01.pdf* handout02.pdf* ...

решение3

Вам не обязательно нужен grep. Вы можете передать шаблон в ls.

pdfunite $(ls handout*.pdf*) merged.pdf

Связанный контент