我在目录中有几百个gpg加密文件,格式为filename.xyz.gpg,其中“xyz”是一些任意扩展名。我需要解密所有文件以生成filename.xyz解密,这样我就不必手动输入每个文件的密码。
我为“测试”目录尝试了以下内容:
for file in 'ls Testing'; do (echo <password>|gpg --passphrase-fd 0 -d $file
--output $file.decrypted);
我结束了命令提示&gt;,没有任何反应。
我的语法有什么问题?如果没有bash shell循环,有没有更有效的方法呢?
答案 0 :(得分:22)
gpg
可以解密多个文件,因此您不需要编写循环。
尝试以下方法。您需要输入一次密码。
gpg --passphrase-fd 0 --decrypt-files *.gpg
答案 1 :(得分:14)
正如手册中所说,您需要添加--batch
选项:
--passphrase-fd n
Read the passphrase from file descriptor n. Only the first line will be read from file descriptor n. If you use 0 for n, the passphrase will be read from
STDIN. This can only be used if only one passphrase is supplied. Note that this passphrase is only used if the option --batch has also been given. This is
different from gpg.
--passphrase string
Use string as the passphrase. This can only be used if only one passphrase is supplied. Obviously, this is of very questionable security on a multi-user sys‐
tem. Don't use this option if you can avoid it. Note that this passphrase is only used if the option --batch has also been given. This is different from
gpg.
您可以使用以下两种形式之一:
echo "passphrase" | gpg --passphrase-fd 0 --batch -d --output "decrypted.file" "file.gpg"
或更简单:
gpg --passphrase "passphrase" --batch -d --output "decrypted.file" "file.gpg"
您可以尝试这样的脚本来提取文件:
#!/bin/bash
read -rsp "Enter passphrase: " PASSPHRASE
for FILE in *.*.gpg; do
echo "Extracting $FILE to ${FILE%.gpg}."
echo "$PASSPHRASE" | gpg --passphrase-fd 0 --batch -d --output "${FILE%.gpg}" "$FILE"
done
答案 2 :(得分:0)
我成功使用了gpg --decrypt-files * 但不是* .gpg
答案 3 :(得分:0)
它与以下命令配合使用:
对于单个文件:
gpg --decrypt --input C:\PGPFiles\[encryptedfilename.pgp] --passphrase [yourpassphrase]
对于多个文件:
gpg --decrypt --input C:\PGPFiles\* --passphrase [yourpassphrase]