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

Try*_*ain 3 shell directory recursive wildcards

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

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

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

java -jar ../jsignpdf-1.4.3/JSignPdf.jar *.pdf -a
Run Code Online (Sandbox Code Playgroud)

...这当然适用于当前目录中的所有 PDF 文件。我怎样才能使它也能在所有子目录中提取所有 .pdf 文件?

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

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

Sté*_*las 6

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

java -jar ../jsignpdf-1.4.3/JSignPdf.jar ./**/*.pdf -a
Run Code Online (Sandbox Code Playgroud)

你可以用fish或做同样的事情bash -O globstar,但要注意那些在下降目录树时可能会遍历符号链接(在bash4.3 中部分修复,在 5.0 及更高版本中完全修复)。

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

find . -name '*.pdf' -exec sh -c '
  exec java -jar ../jsignpdf-1.4.3/JSignPdf.jar "$@" -a' sh {} +
Run Code Online (Sandbox Code Playgroud)

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