如何记录 gpg 验证文件?

How to log gpg verified files?

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

因此,我如何才能捕获 whether/or 而不是我的循环 passed/failed 中的特定文件,以便我可以将其记录到另一个文件中,供以后参考?

我想要这样的东西:

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]

考虑:

#!/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 不会在我们每次写入时被截断。

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