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命令不再执行,保证不会误删除

你可能感兴趣的:(shell脚本)