Найти все файлы по имени рекурсивно, расшифровать и переименовать их с помощью сценария оболочки - PullRequest
0 голосов
/ 11 января 2020

Я пытаюсь написать скрипт, чтобы найти все файлы с .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 ]

1 голос
/ 11 января 2020

$(sed -e "p;s/.$1//") это часть, которая висит. Вы можете проверить это, добавив set -x и выполнив свой скрипт. Это связано с тем, что sed требует входной файл / поток, и ему ничего не дано.

Вы можете использовать bash замену подстроки "${file//.$1}"

$ { строка // $ 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
}
0 голосов
/ 13 января 2020

Вы можете избежать подоболочки $ (найти. -Name ". $ 1. ") , используя некоторое время l oop.

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.*")
}

см

...