删除不活动的5天旧文件

时间:2013-04-20 08:35:23

标签: bash shell

我的目标是删除任何进程不再使用的超过5天的旧文件。 作为首发,我已经编写了以下脚本,但它没有用,说没有找到第10行命令。

HOME=~/var

cd $HOME

for f in `find . -type f`; do
  if [`lsof -n $f`]; then

       echo $f
  fi

done

1 个答案:

答案 0 :(得分:2)

嗯,如果它没有做好,请试试这个:

#!/bin/bash

     DIR=$HOME/var
     ##########################################################
     ## files older than 5 days and recursive value set to 1 
     # for f in $(find  $DIR -mtime +5 -maxdepth 1 -type f); do
     ##########################################################
     for f in $(find  $DIR -type f); do
        # run lsof and look for pattern a-z send it to dev null
        lsof -n $f |grep [a-z] > /dev/null
        # If it was found the exit status will be 0 or success
        if  [ $? = 0 ]; then
           echo "$f in use -->"
        else
                echo "File $f not in use"
        fi
    done

在您的脚本中,您已将HOME定义为〜/ var - 在脚本中使用squigly line我会尝试远离。其次,您正在更改脚本中的环境变量值。尝试从命令行

env|grep HOME

这种新方法更清洁

现在这是另一个指针,可能意味着你需要进行进一步的改变......

你的脚本会在cron作业中运行吗?它会像现有用户一样作为cron条目运行吗?如果设置为root运行,那么上面将失败我会告诉你如何:

echo $HOME
/home/myuser

sudo -i

echo $HOME
/root

注意home的〜或$ HOME值如何变化..所以如果你决定将它作为cron条目作为另一个用户运行,那么试试这个

scriptuser="your_user"
getent passwd $scriptuser|awk -F":" '{print $6}'

如果当前用户是sudo su - 或sudo -i然后执行脚本然后尝试:

getent passwd $(logname)|awk -F":" '{print $6}'