Existem várias coisas erradas e complexidade desnecessária: -
- A chamada
xargs
dupla significa que a segunda vê uma única linha de entrada, então{}
é substituído apenas uma vez por uma única string contendo todos os nomes de arquivos correspondentes, masecho
não mostra essa diferença na saída (compareecho a b
comecho "a b"
). - O argumento
-0
significa quexargs
precisa de um caractere nulo ('
) entre os argumentos de entrada e não há nenhum; isso também força a entrada a ser tratada como um único parâmetro.xargs
' - Ao exibir apenas o nome do arquivo quando a condição corresponde, você obtém um nome de arquivo por linha, que pode ser canalizado diretamente para
grep
sem a necessidade desed
ouxargs -I
. - Infelizmente,
-if
força um comando por linha de entrada e não há opção para adicionar parâmetros à direita, mas há uma rodada de trabalho simples: adicione os parâmetros à direita do fluxo de entrada.
Este é um comando simplificado com os parâmetros finais adicionados (testei com uma condição xargs -d'\n'
diferente, não tendo nenhum PDF correspondente): -
{ exiftool -p '${FileName}' -if '$Subject =~/DATA/i' -q *.pdf; \
echo -e "cat\noutput\nbinder1.pdf"; } | xargs -d'\n' pdftk
A opção %code% faz o comando funcionar quando os nomes dos arquivos possuem espaços em branco incorporados.