需求是批量修改*.crt 和*.key 为 ssl.chain.crt 和 server.key ,为什么会有这样的需求主要是踩了一个大坑Sectigo AddTrust External CA Root Expiring May 30, 2020,说多了都是泪。
2020 年 05 月 31 日 - 初稿
阅读原文 - https://wsgzao.github.io/post/bash-recursive/
网上搜索了关键词,发现这个脚本写得比较清晰,但还是需要修改下
#!/bin/bash
function changeName(){
#new=`echo $1|sed 's/^/abc/g'`
new=`echo $1|sed -r 's/abc(.*$)/\1/g'`
echo changeName old: $1 new: $new
if [ $1 != $new ];then
mv $1 $new
fi
}
function travFolder(){
#echo "travFolder start"
flist=`ls $1`
cd $1
for f in $flist
do
#echo traverse do $f
local old=$f
if test -d $f
then
#echo "traverse dir:${f}"
travFolder $f
#echo "traverse rename dir:${f}"
changeName $old #rename folder
else
#echo "traverse file:$f"
changeName $f
fi
done
cd ../
}
param=$1
if [ -z "$1" ]
then
param="./"
echo "empty string: $param"
else
param=$1
fi
travFolder $param
如果你考虑使用 rename 简化代码,可以参考 Stack Overflow 的一篇文章
How to Batch Rename Files in a macOS Terminal?
#!/bin/bash
function travFolder(){
#echo "travFolder start"
flist=`ls $1`
cd $1
for f in *.key; do mv "$f" "server.key"; done
for f in *.crt; do mv "$f" "ssl.chain.crt"; done
for f in $flist
do
#echo traverse do $f
if test -d $f
then
#echo "traverse dir:${f}"
travFolder $f
fi
done
cd ../
}
param=$1
if [ -z "$1" ]
then
param="./"
echo "empty string: $param"
else
param=$1
fi
travFolder $param
1
ddsfeng 2020-06-02 11:57:21 +08:00
看来楼主对 `find` 是一无所知...
|
2
hackerang 2020-06-02 12:00:25 +08:00
...
|
3
hejingyuan199 2020-06-02 12:02:45 +08:00
楼主在练习递归和二叉查找树算法。
( joking ) |
4
jimliang 2020-06-02 12:18:54 +08:00
find xxxx | xargs xxx | mv xxx
|
5
alsas 2020-06-02 12:32:33 +08:00
xargs 神器用起
|
6
aloxaf 2020-06-02 12:46:08 +08:00
此时一位使用 zmv 的 zsh 用户路过:
``` autoload -Uz zmv zmv -n '(**/)*.key' '${1}server.key' ``` 并且附赠了使用 perl-rename 的方式: ``` perl-rename 's/[^\/]+\.key/server.key/' **/*.key ``` |
7
pmispig 2020-06-02 16:49:02 +08:00
复杂的功能统统用 python 来写,用 shell 太憋屈
|