¿Cómo puedo utilizar la salida de ls/grep como entrada para pdfunite?

¿Cómo puedo utilizar la salida de ls/grep como entrada para pdfunite?

Quiero usar pdfunite para fusionar varios archivos pdf en un archivo de salida. Dado que el directorio contiene muchas cosas diferentes, pensé que podría usar ls/grep para obtener los nombres de archivos apropiados y luego usar pdfunite para armarlos. La salida de ls/grep tiene este aspecto:

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

Luego quiero invocar pdfunit, que tiene la siguiente sintaxis:

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

Mi problema es que no parece que pueda canalizar la salida de ls/grep a pdfunite, porque se supone que no funciona así. Por otro lado, si intento:

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

entonces grep obviamente se queja de mi archivo de salida elegido:

grep: grep.pdf: No such file or directory

Sé que podría hacer dos pasos separados y luego funcionaría, pero me gustaría descubrir cómo hacerlo con una línea.

Respuesta1

Si los patrones de su archivo son así de simples, realmente no necesita una expresión regular y puede usar un comodín simple:

pdfunite handout??.pdf

De lo contrario, puede usar una expresión regular con el findcomando y -regex, pero no pude encontrar una manera de ejecutarla que no tenga la posibilidad de dividirse en múltiples grupos de archivos. Algunas de las formas en que puede hacerlo también dependen de que ninguno de los nombres de archivos tenga espacios.

Respuesta2

Creo que el carácter "tick" se puede usar para hacer eso (lo que está encima de la tilda). Pruebe algo como esto:

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

Por lo que tengo entendido, así es como se anida un comando. Todo lo que esté dentro de los ticks se ejecuta como su propio comando y su salida reemplaza los ticks. Entonces, el comando anterior equivaldría esencialmente a

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

Respuesta3

No necesariamente necesitas un grep. Puedes pasarle el patrón a ls.

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

información relacionada