Como posso usar a saída de ls/grep como entrada para pdfunite

Como posso usar a saída de ls/grep como entrada para pdfunite

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 findcomando 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

informação relacionada