基本上,我要做的是批处理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
对于没有空格的文件,这没什么问题。
我的报价是否已关闭?有更好的方法吗?
答案 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"