0

我在gpg --verify我引用的文件列表上运行gpg_verify.txt. 我想跟踪哪些通过了,以便我以后可以下载一些首先通过我的检查的文件。

因此,如何捕获循环中的特定文件是否通过/失败,以便我可以将其记录到不同的文件中,以便以后参考?

我想要类似的东西:

while read -r line;
do 
  gpg --verify $line
  if(above output^ passes) then;
   > passed_gpg.txt
  else
   > failed_gpg.txt
done < gpg_verify.txt

这是我刚运行时的示例输出:

while read -r line;
do 
  gpg --verify $line
done < gpg_verify.txt

输出:

gpg: Signature made Tue Feb 11 17:26:10 2020 UTC
gpg:                using RSA key XXXXXXXXXXXX
gpg: Good signature from "Rando person (XXXXX Signing Key) <example@example.com>" [ultimate]
4

1 回答 1

1

考虑:

#!/usr/bin/env bash
while IFS= read -r filename; do
  if gpg -v "$filename"; then
    printf '%s\n' "$filename" >&3
  else
    printf '%s\n' "$filename" >&4
  fi
done <gpg_verify.txt 3>passed_gpg.txt 4>failed_gpg.txt

这里有什么不同?

  • 我们将要测试其退出状态的命令放在if.
  • 我们明确地向输出文件写入了一些东西,而不仅仅是打开它们。
  • 当循环开始时,我们只打开每个输出文件一次(然后将它们附加到不同的文件描述符编号)。这意味着每次我们想要写入时,outfile 都不会被截断。

这仍然不是完美的——更好的工具可能会避免在将文件名存储在面向行的文件中时隐含有关文件名的假设——但它是一个开始的地方。

于 2020-02-12T23:19:19.733 回答