用gpg加密文件

时间:2014-11-25 15:52:40

标签: bash shell whitespace gnupg

基本上,我要做的是批处理gpg加密文件名中带有空格的文件,我的报价也很远。

以下是代码:

#!/bin/sh

input_path="/opt/ftp_dirs/upload/*.*"
archive_path='/opt/archives'
encrypt_path='/opt/archives/encrypted'

for encrypted in $input_path; do
    decrypted="$encrypted`date +%Y%m%d%N`.gpg"
    echo "$encrypted"
    /usr/bin/gpg --batch --no-tty --yes --output $decrypted --recipient someone@something.com --passphrase password --encrypt $encrypted
done
exit

对于没有空格的文件,这没什么问题。

我的报价是否已关闭?有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

引用变量时,如果使用引号(例如"$decrypted"),则内容不会被shell解释,而是作为单个参数逐字传递给命令。

如果你不使用引号(例如,简单地使用$decrypted,就像你一样),shell会解释内容,这意味着空格会为命令生成多个参数。

引用变量时使用引号,因此shell不会解释它们,并且路径中的空格会被视为您想要的:

/usr/bin/gpg --batch --no-tty --yes --output "$decrypted" --recipient someone@something.com --passphrase password --encrypt "$encrypted"

答案 1 :(得分:0)

请务必引用"$encrypted""$decrypted"

gpg --batch --no-tty --yes --output "$decrypted" --recipient someone@something.com --passphrase password --encrypt "$encrypted"