我需要一个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"如果"但是没有删除文件夹。
我使用centOS 7。
答案 0 :(得分:0)
您似乎正在尝试删除受保护的目录。尝试使用X.shape
删除目录。
要执行此操作,请更改此行:
sudo
收件人: rm -rf "$dir"/"$anyo_actual"/"$A_BORRAR"
所以你的sript最终看起来像这样:
sudo rm -rf "$dir"/"$anyo_actual"/"$A_BORRAR"
但是有一个问题:每次运行脚本时都必须输入sudo密码。
一个不那么优雅且不那么安全的解决方案是编辑sudoers文件。
为此,请运行#!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 visudo
答案 1 :(得分:0)
问题是在进行数学运算时,例如:“04-2”(4月 - 参考月)结果是应该删除的2月(2月)月,但结果是“2”而不是“02”,我找不到要删除的文件夹,脚本无效。
脚本保持这样:
#!bin/bash
limit="80"
dir="/var/spool/asterisk/monitor"
mes=`date +%m`
anyo=`date +%Y`
ref="02";
# espacio en disco #
df -h | grep /dev/xvdb1 | sed s/%//g | awk '{print $5}' >> temp.log
temp=$( cat temp.log)
if [ $limit -le $temp ]; then
BORRAR=0;
BORRAR=$((10#$mes-$ref))
case $BORRAR in
1) rm -rf "$dir"/"$anyo"/0"$BORRAR"/
;;
2) rm -rf "$dir"/"$anyo"/0"$BORRAR"/
;;
3) rm -rf "$dir"/"$anyo"/0"$BORRAR"/
;;
4) rm -rf "$dir"/"$anyo"/0"$BORRAR"/
;;
5) rm -rf "$dir"/"$anyo"/0"$BORRAR"/
;;
6) rm -rf "$dir"/"$anyo"/0"$BORRAR"/
;;
7) rm -rf "$dir"/"$anyo"/0"$BORRAR"/
;;
8) rm -rf "$dir"/"$anyo"/0"$BORRAR"/
;;
9) rm -rf "$dir"/"$anyo"/0"$BORRAR"/
;;
10) rm -rf "$dir"/"$anyo"/"$BORRAR"/
;;
11) rm -rf "$dir"/"$anyo"/"$BORRAR"/
;;
12) rm -rf "$dir"/"$anyo"/"$BORRAR"/
;;
esac
else
echo "NADA PARA BORRAR"
fi
rm -Rf temp.log