我的目標是刪除5天以上的舊文件,這些文件不再被任何進程使用。 作爲首發,我寫了下面的腳本,但它不起作用,說第10行命令沒有找到。刪除不活動的5天舊文件
HOME=~/var
cd $HOME
for f in `find . -type f`; do
if [`lsof -n $f`]; then
echo $f
fi
done
我的目標是刪除5天以上的舊文件,這些文件不再被任何進程使用。 作爲首發,我寫了下面的腳本,但它不起作用,說第10行命令沒有找到。刪除不活動的5天舊文件
HOME=~/var
cd $HOME
for f in `find . -type f`; do
if [`lsof -n $f`]; then
echo $f
fi
done
嗯,你們其不被正確地完成試試這個:
#!/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}'
哇......完全是我想要的......並感謝您解釋其他好點子:) – 2013-04-20 17:06:11
您需要指出的化妝時間。像'mtime + 5'可以做。 – fedorqui 2013-04-20 09:04:29
是的,但這次我被困在lsof線上。 – 2013-04-20 09:11:59