我需要一个 shell 脚本来删除文件和文件夹。 例如asterisk创建一个目录“/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。
最佳答案
您似乎正试图删除一个 protected 目录。尝试使用 sudo
删除目录。
为此,更改此行:
rm -rf "$dir"/"$anyo_actual"/"$A_BORRAR"
收件人 sudo rm -rf "$dir"/"$anyo_actual"/"$A_BORRAR"
所以你的脚本最终会看起来像这样:
#!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
关于linux - 删除星号中旧文件夹的脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49820989/