Bash 按名称递归查找所有文件,使用shell脚本解密并重命名它们
我正在尝试编写一个脚本来查找名称中包含.production的所有文件,解密这些文件并保存它们的副本,而不包含.production 示例文件:Bash 按名称递归查找所有文件,使用shell脚本解密并重命名它们,bash,shell,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
./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
}
$sed-EP;s/$1//是挂起的部分。您可以通过添加set-x并执行脚本来检查这一点。这是因为sed需要一个输入文件/流,而没有给它任何文件/流
您可以使用bash子字符串替换${file/.$1}
${string//$substring\u to\u 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
}
您可以避免使用subshell$find-姓名。1美元。通过使用while循环
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.*")
}
请参见是否有任何错误?有什么问题吗?@franzisk没有错误,没有效果。只是回显第一个文件名,为什么我需要避免它?如果在某些文件/路径名中有空格或换行符,则在处理输出时会出现一些错误。现在可能发生,也可能不发生,但会的。