我有一个目录,里面有几个文件。我正在尝试解密这些文件并将它们移动到另一个目录。我无法弄清楚如何设置输出文件名并移动它。
因此,目录结构如下所示:
/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
答案 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) - 这个页面通常非常有用。