2013-04-20 16 views
0

我的目標是刪除5天以上的舊文件,這些文件不再被任何進程使用。 作爲首發,我寫了下面的腳本,但它不起作用,說第10行命令沒有找到。刪除不活動的5天舊文件

HOME=~/var 

cd $HOME 

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

     echo $f 
    fi 

done 
+0

您需要指出的化妝時間。像'mtime + 5'可以做。 – fedorqui 2013-04-20 09:04:29

+0

是的,但這次我被困在lsof線上。 – 2013-04-20 09:11:59

回答

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行我會嘗試和遠離。其次,你是你的腳本中改變一個環境變量的值..從你的命令行嘗試

env|grep HOME 

這種新方法是有很多清潔

現在這裏是這可能意味着你需要做進一步的修改另一個指針...

您的腳本是否會在cron工作中運行?它會作爲這個現有用戶的cron條目運行嗎?如果它被設置爲根,然後運行上面會失敗,我會告訴你如何:

echo $HOME 
/home/myuser 

sudo -i 

echo $HOME 
/root 

通知怎麼〜$或家中價值發生了變化..所以,如果你決定將其作爲cron進入以其他用戶身份,然後嘗試這個

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

,如果它是那麼須藤蘇當前用戶 - 或sudo然後-i執行腳本然後嘗試:

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

哇......完全是我想要的......並感謝您解釋其他好點子:) – 2013-04-20 17:06:11