Passage de tous les files de type de file spécifique dans les sous-directorys actuels et secondaires

J'ai construit une command élaborée de plus de 500 caractères avec de nombreux arguments et des commutateurs pour l'autosigner plusieurs documents PDF.

J'utilise JSignPDF et j'aimerais utiliser son mode batch incluant le directory courant et les sous-directorys.

La partie pertinente de la command que j'ai des problèmes avec est:

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

… ce qui bien sûr fonctionne très bien pour tous les files PDF dans le directory courant. Comment puis-je le faire afin qu'il ramasse tous les files .pdf dans tous les sous-directorys ainsi?

J'ai essayé quelques choses qui n'ont pas fonctionné … novice et même pas la peine de mentionner … des choses comme -r (évidemment would- / did-not work).

Je me request si c'est une réponse simple ou qui a besoin d'une certaine magie awk, si cela serait même valide. Toute aide est grandement appréciée.

Avec zsh ou ksh93 -G , vous pourriez faire:

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

Vous pouvez faire la même chose avec fish ou bash -O globstar , mais attention, ceux-ci peuvent traverser des liens symboliques lors de la descente de l'arborescence de directorys (corrigé dans bash 4.3).

Sinon, si la list des files n'est pas trop volumineuse, vous pourriez faire:

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

Mais méfiez-vous de find peut essayer de split la list et exécuter plusieurs commands sh pour tenter de dépasser une limite sur la taille de la command line.