Passando todos os arquivos do tipo de arquivo específico em atuais e subdiretórios

3

Eu construí um comando elaborado de mais de 500 caracteres com muitos argumentos e opções para autosignar vários documentos PDF.

Estou usando o JSignPDF e gostaria de usar o modo em lote, incluindo o diretório atual e os subdiretórios.

A parte relevante do comando que estou tendo problemas é:

java -jar ../jsignpdf-1.4.3/JSignPdf.jar *.pdf -a

... que, claro, funciona muito bem para todos os arquivos PDF no diretório atual. Como posso fazer isso para que ele pegue todos os arquivos .pdf em todos os subdiretórios também?

Eu tentei algumas coisas que não funcionaram ... novato e nem sequer vale a pena mencionar ... coisas como -r (obviamente não funcionaria).

Eu estou querendo saber se esta é uma resposta simples ou precisa de alguma magia de awk, se isso seria mesmo válido. Qualquer ajuda é muito apreciada.

    
por TryTryAgain 31.01.2013 / 01:04

1 resposta

6

Com zsh ou ksh93 -G , você poderia fazer:

java -jar ../jsignpdf-1.4.3/JSignPdf.jar ./**/*.pdf -a

Você poderia fazer o mesmo com fish ou bash -O globstar , mas esteja ciente de que eles podem atravessar links simbólicos ao descer a árvore de diretórios (corrigidos em bash 4.3).

Caso contrário, se a lista de arquivos não for muito grande, você pode fazer:

find . -name '*.pdf' -exec sh -c '
  exec java -jar ../jsignpdf-1.4.3/JSignPdf.jar "$@" -a' sh {} +

Mas cuidado, pois find pode tentar dividir a lista e executar vários comandos sh para tentar superar um limite no tamanho da linha de comando.

    
por 31.01.2013 / 01:12