处理所有目录中的所有文件

时间:2019-04-22 04:45:56

标签: bash

我有一个目录,将其称为foo,在foo内有N个目录,bar1..barN。每个目录中可以有1..N个文件,所有文件均经过gpg加密。我想要解密每个文件夹中的所有文件。

#!/bin/bash

for d in *; do
   cd $d
   pwd
   mkdir gpg
   for fn in *.gpg; do
      n=${fn##*/}
      f=${n%.gpg}
      gpg --homedir ~/Documents/gpg/ -u MY_PVT_KEY_NAME -do $f.txt $fn
      mv $fn gpg
   done
   cd ..
done

由于某种原因,唯一经过正确处理的目录是第一个目录,其余目录均无法解密,文件被移至gpg目录,但文件未解密。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您可以使用bash函数和find来简化此工作:

gpgdecrypt()
{
tofile="${@%.gpg}.txt"
gpg --homedir ~/Documents/gpg/ -u MY_PVT_KEY_NAME -do "${tofile}" "${@}"
}

# Export the function 
export -f gpgdecrypt
# Then  fetch the files using find and feed the files to the gpgdecrypt fn.
find /base/path -type f -name "*.gpg" -exec bash -c 'gpgdecrypt $1' _ {} \;