shell脚本中使用删除操作注意事项

 

错误例子:

FILE_HOME="/home/admin/output/logs"
cd $FILE_HOME
for DIR in `ls $FILE_HOME`   ##1
do
        cd "./$DIR/abc"  ##2
        find . -maxdepth 1 -mmin +3 | xargs rm -rf  ##3
        cd ../..   ##这里使用了相对路径  ##4
done
 这个例子不安全

##1这里判断有目录后,如果此时其中一个目录被另一个进程删除

##2这行执行失败

##3会把当前目录(/home/admin/output/logs)下的所有文件删除

##4 cd ../.. 会到/home/admin/下

下一个循环依照上面相同的逻辑##2这行执行失败,##3把/home/admin下所有文件删除

 

正确的写法

FILE_HOME="/home/admin/output/logs"
for DIR in `ls $FILE_HOME` 
do
	cd "$FILE_HOME/$DIR/abc" && (find . -maxdepth 1 -mmin +3 | xargs -t -n 1000 rm -rf)
done
 

 

1.使用绝对路径

2.使用&&,前一个cd命令执行失败,后一个rm命令不再执行,保证不会误删除

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值