我需要一个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

10-05 20:41
查看更多