linux - 删除星号中旧文件夹的脚本

标签 linux bash shell scripting

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

相关文章:

java - Servlet/webapp 抛出 load() 异常

arrays - 在 bash 函数中定义一个本地数组并在该函数外部访问它

shell - 如何编写shell脚本来查找PDF中的页数?

linux - 在 Ubuntu 上使用 X11 覆盖窗口和根窗口

linux - 在 ARM 上用 DEBIAN 替换 YOCTO

linux - 是否可以更改远程服务器(Linux RedHat 4.4.7-17)上的默认浏览器(lynx)? (使用 Gadfly 在 Julia 中绘图)

bash - 在bash中逐行读取txt文件,而不知道其名称

bash - Hadoop 2.7.1安装没有bashrc吗?

linux - 文件夹数返回为零值

linux:获取一个脚本,以便能够向用户询问文件名,然后打开该文件