2013-04-17 229 views
2

我有一個腳本,我每週通過一個cron運行,刪除我的web服務器上的臨時文件的負載,但我剛剛注意到,該腳本沒有刪除仍在使用的文件夾起居空間。刪除腳本只刪除文件不是文件夾

什麼是最好的修改腳本以刪除文件夾以及?

find /my/path/ -type d –ctime +5 –exec rm -r {} \; 

#!/bin/bash 
# Deletes temp files older then 5 days 
DOCS='/var/www/user/docs/temp' 
SCRATCH='/var/www/user/temp/scratch' 

if [ -d "$DOCS" ]; then 
find $DOCSJS -type f -mtime +5 -exec rm -rf {} \; > /tmp/docs.txt 
fi 
if [ -d "$SCRATCH" ]; then 
find $SCRATCH -type f -mtime +5 -exec rm -rf {} \; > /tmp/docs.txt 
fi 

我的腳本實際上有-rf作爲標誌來刪除所有文件夾。

需要注意的一點是,上面的文件夾是指向/mnt/sdb1/docs/js/mnt/sdb1/temp/scratch的符號鏈接 - 腳本是否遵循符號鏈接,或者我應該將其硬編碼到掛載?

+0

刪除文件夾使用'rm -rf'普通'rm'不要刪除文件夾 –

+0

對不起,我修改了這個問題,因爲我已經有了那個標誌 – Grimlockz

回答

0

改變這種

if [ -d "$SCRATCH" ]; then 
find $SCRATCH -type f -mtime +5 -exec rm -rf {} \; > /tmp/docs.txt 
fi 

if [ -d "$SCRATCH" ]; then 
find $SCRATCH -type d -mtime +5 -exec rm -rf {} \; > /tmp/docs.txt 
fi 

您只能使用-type f標誌搜索文件;對目錄使用-type d

+0

ahhh當然 - 會跳過文件夾根目錄下的文件-so應該有另外兩個if語句僅用於文件? – Grimlockz

+0

只是跳過if-cases以及'-type [fd]',然後使用find與rm -rf –

+0

謝謝_我從腳本中刪除了-type – Grimlockz

0

您需要將其他選項傳遞給腳本中的rm命令。其實你需要rm -rf。根本我建議去man 1 rm

0

改變這一點:

find $DOCSJS -type f -mtime +5 -exec rm 

到:

find $DOCSJS -type f -mtime +5 -exec rm -Rf 
0

由於find的輸出僅限於文件,因此目前不能刪除目錄。這樣既舊文件和目錄傳遞到rm -rf

find $DIR -mtime +5 -exec rm -rf {} \; 

這個你應該放棄這一選項將保留其在他們有新的文件舊目錄(但會刪除舊文件),但擺脫的文件和兩個都是舊的目錄。