这个问题有没有什么简单的方法呢?

ls /xx/yy/zz/
account   bank   cost   fee   limit    payrule    rcms   remit    txq   user  ........
bank    boss    cust    fin     notify    pos        ation    port     sett    trade   .........
需求:
执行这些目录下 service-*.sh 脚本(脚本最后一行是exit 0)时 自动拷贝执行脚本的脚本的父目录的全部内容到/aa/bb/backup/目录名+日期
eg:sh /xx/yy/zz/account/service-account.sh ==> 拷贝 account 到 /aa/bb/backup/account`date +%Y%m%d`

一种很low的办法就是每个脚本手动加入语句(并且每个脚本中加入的语句多不同)

把下面语句加入所有的service-*.sh 语句中(所有脚本只需要加入同样的语句):

SDIR=/xx/yy/zz
DDIR=/aa/bb/backup
dir=`find $SDIR -name "service-*.sh"|grep $0|awk -F'/' '{print $(NF-1)}'`
#原本dir=`pwd|awk -F '/' '{print $NF}'`来取dir的,但是执行脚本的路径变了就不行了
cp -a ${SDIR}/$dir ${DDIR}/${dir}`date +%Y%m%d`


怎么循环把上面语句加入文件中呢?

for file in `find /aa/bb/backup -name "service-*.sh"`
do
sed -i 's#exit 0#SDIR=/xx/yy/zz &#' $file
sed -i 's#exit 0#DDIR=/aa/bb/backup/ &#' $file
#sed -i 's#exit 0#dir=`find $SDIR -name "service-*.sh"|grep $0|awk -F'/' '{print $(NF-1)}'` &#' $file
#sed -i 's#exit 0#cp -a ${SDIR}/$dir ${DDIR}/${dir}`date +%Y%m%d` &#' $file
#上面这两句加入有问题。。。。

#还是使用echo  'xxxx' >>$file  靠谱 (先用sed找到exit 0并注释,最后在加入exit 0)(sed -i 's%echo $0%#echo $0%g' $file)
done

原文地址:https://www.cnblogs.com/fanxuanhui-linux/p/5835981.html