我需要一个shell脚本来删除文件和文件夹。
例如星号创建一个目录“/var/spool/asteisk/monitor/$year/$month/$day”
当磁盘已满(或95%)时,我想运行脚本:
#!bin/bash
limite="75"
dir="/var/spool/asterisk/monitor"
mes_actual=`date +%m`
anyo_actual=`date +%Y`
ref="2";
# espacio en disco #
df -h | grep /dev/xvdb1 | sed s/%//g | awk '{print $5}' >> temp.log
temp=$( cat temp.log)
if [ $limite -le $temp ];
then
A_BORRAR=$((10#$mes_actual-$ref))
rm -rf "$dir"/"$anyo_actual"/"$A_BORRAR"
echo "borrado" "$A_BORRAR"
else
echo "nada para borrar"
fi
echo "all OK"
rm -Rf temp.log
df -h | grep /dev/xvdb1 | sed s/%//g | awk '{print $5}'
我不知道为什么,但我的脚本没有删除文件夹。
脚本进入bucle“if”,但不移除文件夹。
我用的是centOS 7。
最佳答案
似乎您正在尝试删除受保护的目录。尝试使用sudo
删除目录。
为此,请更改此行:rm -rf "$dir"/"$anyo_actual"/"$A_BORRAR"
收件人:sudo rm -rf "$dir"/"$anyo_actual"/"$A_BORRAR"
所以你的sript最终会是这样的:
#!bin/bash
limite="75"
dir="/var/spool/asterisk/monitor"
mes_actual=`date +%m`
anyo_actual=`date +%Y`
ref="2";
# espacio en disco #
df -h | grep /dev/xvdb1 | sed s/%//g | awk '{print $5}' >> temp.log
temp=$( cat temp.log)
if [ $limite -le $temp ];
then
A_BORRAR=$((10#$mes_actual-$ref))
sudo rm -rf "$dir"/"$anyo_actual"/"$A_BORRAR"
echo "borrado" "$A_BORRAR"
else
echo "nada para borrar"
fi
echo "all OK"
rm -Rf temp.log
df -h | grep /dev/xvdb1 | sed s/%//g | awk '{print $5}'
但有一个问题:每次运行脚本时,都必须输入sudo密码。
一个不那么优雅和不那么安全的解决方案是编辑sudoers文件。
为此,运行
sudo visudo
并输入用户名和脚本路径。yourUserName ALL=(ALL) NOPASSWD: /path/to/the/script