
Quero usar o pdfunite para mesclar vários arquivos PDF em um arquivo de saída. Como o diretório contém muitas coisas diferentes, pensei em usar ls/grep para obter os nomes de arquivos apropriados e depois usar pdfunite para montá-los. A saída de ls/grep é assim:
ls | grep "handout...pdf"
handout01.pdf*
handout02.pdf*
handout03.pdf*
handout04.pdf*
handout05.pdf*
handout06.pdf*
Então quero invocar o pdfunit, que tem a seguinte sintaxe:
pdfunite [options] PDF-sourcefile1..PDF-sourcefilen PDF-destfile
Meu problema é que não parece que posso canalizar a saída de ls/grep para o pdfunite, porque não deveria funcionar assim. Por outro lado, se eu tentar:
pdfunite ls | grep "handout...pdf" grep.pdf
então o grep obviamente reclama do arquivo de saída escolhido:
grep: grep.pdf: No such file or directory
Eu sei que poderia executar duas etapas separadas e funcionaria, mas gostaria de descobrir como fazer isso com uma linha.
Responder1
Se seus padrões de arquivo são tão simples, você realmente não precisa de um regex e pode usar um curinga simples:
pdfunite handout??.pdf
Caso contrário, você pode usar um regex com o find
comando e -regex, mas não consegui encontrar uma maneira de executá-lo que não tenha a possibilidade de se dividir em vários grupos de arquivos. Algumas das maneiras pelas quais você pode fazer isso também dependem de nenhum dos nomes de arquivos conter espaços.
Responder2
o caractere "tick" pode ser usado para fazer isso (a coisa acima do tilda), eu acredito. Tente algo assim:
pdfunite [options] `ls | grep "handout...pdf"`
Pelo que entendi, é assim que você aninha um comando. Qualquer coisa dentro dos ticks é executada como seu próprio comando, e a saída substitui os ticks. Então, o comando acima equivaleria essencialmente a
pdfunite [options] handout01.pdf* handout02.pdf* ...
Responder3
Você não precisa necessariamente de um grep. Você pode passar o padrão para ls
.
pdfunite $(ls handout*.pdf*) merged.pdf