Сценарий оболочки для расшифровки и перемещения файлов из одного каталога в другой - PullRequest
2 голосов
/ 25 марта 2010

У меня есть каталог, в котором есть несколько файлов. Я пытаюсь расшифровать эти файлы и переместить их в другой каталог. Я не могу понять, как установить имя выходного файла и переместить его.

Итак, структура каталогов выглядит следующим образом:

/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 ]

1 голос
/ 25 марта 2010
#!/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
0 голосов
/ 25 марта 2010

Мне нравится сначала делать cd:

cd /Applications/MAMP/bin/encrypted/

Тогда

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

или

for FILE in `ls`; do ...

Я лично предпочитаю:

ls | while read FILE; do ...

Тогда может быть

cd -

Важно: Если вы используете подход ls, убедитесь, что ваши имена файлов не содержат пробелов. Смотрите также ссылку в комментарии ghostdog74 (спасибо, кстати) - эта страница, как правило, весьма полезна.

0 голосов
/ 25 марта 2010

Это должно исправить проблемы 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...