它意外地在 GPG 密钥环中生成了大量密钥(没有公钥),我编写了一个脚本来删除这些密钥,但是 GPG 不允许我这样做:
$ gpg --batch --yes --delete-secret-keys KEYS
gpg: can't do this in batch mod
gpg: (unless you specify the key by fingerprint)
我很清楚我在做什么,也知道可能有重复的 key-id,但似乎没有办法强制删除它们,尽管下面的方法也不起作用:
$ yes | gpg --delete-secret-keys KEYS
任何想法?
答案1
用于gpg --list-secret-keys --with-colons --fingerprint
生成易于解析的格式的指纹列表。抓取与要删除的键相对应的表单行,并传递指纹(fpr:::::::::xxxx:
xxxx
) 到gpg --batch --delete-secret-keys
。
以下命令将生成所有密钥指纹。请务必仅选择要删除的密钥指纹!
gpg --list-secret-keys --with-colons --fingerprint | sed -n 's/^fpr:::::::::\([[:alnum:]]\+\):/\1/p'
答案2
我知道这个话题已经很老了,而且答案有点像 Gilles 的答案,但我认为它完全回答了这个问题(因为我遇到了与 OP 同样的难题):
for i in `gpg --with-colons --fingerprint | grep "^fpr" | cut -d: -f10`; do gpg --batch --delete-secret-keys "$i" ; done
答案3
我将 Gilles 和 Dolanor 的答案合并到这个行中,如果你想删除特定的键,这个行很有用:
gpg --fingerprint --with-colons ${GPG_KEY} |\
grep "^fpr" |\
sed -n 's/^fpr:::::::::\([[:alnum:]]\+\):/\1/p' |\
xargs gpg --batch --delete-secret-keys
没有回答原始问题,但可能对其他人有用。
答案4
导出您想要保留的密钥,删除文件,然后重新创建您的环。