用于解密文件并将文件从一个目录移动到另一个目录的Shell脚本

时间:2010-03-25 01:00:54

标签: shell encryption

我有一个目录,里面有几个文件。我正在尝试解密这些文件并将它们移动到另一个目录。我无法弄清楚如何设置输出文件名并移动它。

因此,目录结构如下所示:

/Applications/MAMP/bin/decryptandmove.sh
/Applications/MAMP/bin/passtext.txt
/Applications/MAMP/bin/encrypted/test1.txt.pgp
/Applications/MAMP/bin/encrypted/test2.txt.pgp
/Applications/MAMP/htdocs/www/decrypted/

对于在加密目录中找到的所有文件,我正在尝试解密它们,然后将它们移动到目录www / decrypted /。我不知道加密目录中的文件名将提前是什么(此脚本最终将通过cron作业运行),所以我只想输出具有相同文件名但没有pgp的解密文件。所以,结果将是:

/Applications/MAMP/bin/decryptandmove.sh
/Applications/MAMP/bin/passtext.txt
/Applications/MAMP/bin/encrypted/
/Applications/MAMP/htdocs/decrypted/test1.txt.pgp
/Applications/MAMP/htdocs/decrypted/test2.txt.pgp

所以,这是我到目前为止所写的全部内容并不起作用。 FILE和FILENAME都错了。我甚至都没有参加过活动部分。

pass_phrase=`cat passtext.txt|awk '{print $1}'`

for FILE in '/Applications/MAMP/bin/encrypted/';
 do
    FILENAME=$(basename $FILE .pgp) 
    gpg --passphrase $pass_phrase --output $FILENAME --decrypt $FILE
 done

3 个答案:

答案 0 :(得分:1)

#!/bin/bash
p=$(<passtext.txt)
set -- $p
pass_phrase=$1
destination="/Applications/MAMP/htdocs/www/decrypted/"
cd /Applications/MAMP/bin/encrypted
for FILE in *.pgp;
do
    FILENAME=${FILE%.pgp}
    gpg --passphrase "$pass_phrase" --output "$destination/$FILENAME" --decrypt "$FILE"
done

答案 1 :(得分:0)

这应该可以解决FILENAME和FILE问题,但只有当你现在处于“解密”目录时它才会起作用。如果你想修复它,你必须将正确的目录添加到FILENAME变量:)

pass_phrase=`cat passtext.txt|awk '{print $1}'`

for FILE in /Applications/MAMP/bin/encrypted/*; do
    FILENAME=$(basename $FILE .pgp) 
    gpg --passphrase $pass_phrase --output $FILENAME --decrypt $FILE
done

答案 2 :(得分:0)

我喜欢先cd

cd /Applications/MAMP/bin/encrypted/

然后

for FILE in $(ls); do ...

for FILE in `ls`; do ...

我个人更喜欢:

ls | while read FILE; do ...

然后可能

cd -

重要提示:如果您使用ls方法,请确保您的文件名不包含空格。另请参阅ghostdog74的评论中的链接(谢谢,BTW) - 这个页面通常非常有用。