You shouldn't need to know PGP or GPG for this. The commands being
used here are just a filter: a pipeline copying stdin to stdout, but changing
it on the way.
I have a bunch of PGP files that I want to convert to GPG. Here is
the for loop I am using:
for i in $(find . -name \*.pgp | fgrep -v ring.pgp) ; do ; echo $i ; pgp -fd -z "My passphrase" < $i | gpg --passphrase-fd 3 --batch -c 3<<< "My passphrase" > ${i%pgp}gpg ; done
When I run it, it echoes the first file it finds, and creates the .gpg
file (since it is stdout of one of the commands). However, the file never
gets any data in it. My first instinct is that I have the commands inside
the loop wrong. So, I set i to this first file, and run just the body:
i=./test.pgp
pgp -fd -z "My passphrase" < $i | gpg --passphrase-fd 3 --batch -c 3<<< "My passphrase" > ${i%pgp}gpg
Poof, the command executes in less than a second, and produces the
correct output file. Since I actually run this command outside the loop
with $i in it, I know for certain that I have the body correct. However,
when I run the loop version, the echo command echoes the correct filename
(./test.pgp), but it just hangs there. The output file gets created by
the shell, but the pipeline never puts any data into it.
Why would a for loop's body execute just fine on it own, but not when
called from the loop?
--
"Restore your inalienable human rights. Jack McKinney
Vote Libertarian. http://www.lp.org http://www.lorentz.com
http://www.harrybrowne2000.org jackmc@xxxxxxxxxxx
1024D/D68F2C07 4096g/38AEF076
Attachment:
pgpdQAXqG36ev.pgp
Description: PGP signature