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

0

Eu 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, eu pensei que poderia usar o ls / grep para obter os nomes de arquivos apropriados e, em seguida, usar o pdfunite para montá-lo. A saída do ls / grep tem esta aparência:

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

Então eu quero invocar o pdfunit, que tem a seguinte sintaxe:

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

Meu problema é que não parece que eu possa canalizar a saída de ls / grep para o pdfunite, porque não é para funcionar assim. Por outro lado, se eu tentar:

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

então o grep obviamente reclama do meu arquivo de saída escolhido:

grep: grep.pdf: No such file or directory

Eu sei que poderia fazer duas etapas separadas e, em seguida, funcionaria, mas gostaria de descobrir como fazer isso com uma linha.

    
por achnichtsowichtig 20.05.2015 / 20:25

3 respostas

2

Se os seus padrões de arquivo forem simples, você não precisará realmente de um regex e poderá usar um caractere curinga simples:

pdfunite handout??.pdf

Caso contrário, você pode usar um regex com o comando find 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 de fazer isso também dependem de nenhum dos nomes de arquivos terem espaços.

    
por 20.05.2015 / 20:34
1

o caractere "tick" pode ser usado para fazer isso (a coisa acima do til), 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 dele substitui os ticks. Então, o comando acima seria essencialmente igual a

pdfunite [options] handout01.pdf* handout02.pdf* ...
    
por 20.05.2015 / 20:30
0

Você não precisa necessariamente de um grep. Você pode passar o padrão para ls .

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

    
por 20.05.2015 / 20:31