
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 find
comando 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