传递当前目录和子目录中特定文件类型的所有文件

传递当前目录和子目录中特定文件类型的所有文件

我构建了一个精心设计的 500 多个字符的命令,其中包含许多参数和开关来自动签署多个 PDF 文档。

我正在使用 JSignPDF,我想使用它的批处理模式,包括当前目录和子目录。

我遇到问题的命令的相关部分是:

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

...这当然适用于当前目录中的所有 PDF 文件。我怎样才能让它同时获取所有子目录中的所有 .pdf 文件?

我尝试了一些没有用的东西...新手,甚至不值得一提...像 -r 这样的东西(显然不会工作/没有工作)。

我想知道这是一个简单的答案还是需要一些 awk 魔法,如果这有效的话。任何帮助是极大的赞赏。

答案1

使用zshksh93 -G,您可以执行以下操作:

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

fish您可以使用or执行相同的操作bash -O globstar,但请注意,它们可能会在目录树下降时遍历符号链接(在bash4.3 中部分修复,在 5.0 及更高版本中完全修复)。

否则,如果文件列表不是太大,您可以这样做:

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

但请注意,find可能会尝试拆分列表并运行多个sh命令来尝试克服命令行大小的限制。

相关内容