通过名称递归查找所有文件,使用shell脚本解密并重命名

时间:2020-01-11 17:37:56

标签: bash shell

我正在尝试编写一个脚本,以查找名称中带有.production的所有文件,解密这些文件并保存它们的副本,而无需使用.production

示例文件:

./functions/key.production.json
./src/config.production.js

这是我的代码:

decrypt() {
  echo $1

  for file in $(find . -name "*.$1.*")
  do
      echo "some $file"
      openssl enc -aes-128-cbc -a -d -salt -pass pass:asdffdsa -in $file -out $(sed -e "p;s/.$1//")
  done
}

2 个答案:

答案 0 :(得分:1)

$(sed -e "p;s/.$1//")是挂起的部分。您可以通过添加set -x并执行脚本来进行检查。这是因为sed期望输入文件/流,而没有提供输入文件/流。

您宁愿使用bash子串替换"${file//.$1}"

$ {string // $ substring_to_remove /}

//之后出现的所有内容替换为主字符串中的内容,并替换为最后一个/之后的内容

所以,工作功能应该是

decrypt() {
  echo $1

  for file in $(find . -name "*.$1.*")
  do
      echo "some $file"
      openssl enc -aes-128-cbc -a -d -salt -pass pass:asdffdsa -in $file -out "${file//.$1}"
  done
}

答案 1 :(得分:0)

通过使用while循环,可以避免使用子外壳 $(find。-name“ 。$ 1。”)

decrypt() {
  echo "$1"
  local file
  while read -r file; do
    echo "some $file"
    PROCESS-YOUR-FILE-AND-DO-YOUR-STUFF_HERE
  done < <(find . -name "*.$1.*")
}

请参见

相关问题