2011-10-11 164 views
-1

需要一個腳本來刪除目錄中的所有文件,然後發送一次完整的電子郵件,我有以下作爲模板,但不確定這是否會工作 - 當然沒有添加電子郵件組件!腳本刪除目錄中的所有文件,然後發送電子郵件

#!/bin/sh 
DIR="/var/www/public_html/docs/files/" 
LIST=`ls -l $DIR | grep -v "total 0"` 
FILES=`ls $DIR` 
cd $DIR 
if [ -z "$LIST" ] 
then 
    exit 
else 
    echo "Files Delete:" 
    echo $FILES 
    rm -f * 
fi 

更新:

#!/bin/sh 
DIR="/home/test/test/docs/test/" 
cd $DIR 
rm -f * 
+2

爲什麼你的代碼跳過所有這些箍? 'rm -f/var/www/public_html/docs/files/*'或'rm -f「$ DIR *」'是否足夠? –

+0

爲什麼不試試看看會發生什麼?我期望'rm -f *'可以正常工作。 –

+2

不要使用'ls',使用'find'。 – Anders

回答

1

一些注意事項:

您使用全大寫DIR,LIST和文件,但在shell腳本全大寫的變量是,按照慣例,環境變量。您應該使用例如

dir='/var/www/public_html/docs/files/' 

改爲。

要找到多少文件在目錄中使用

find "$dir" -maxdepth 1 -type f | wc -l 

您同時使用LIST和文件;似乎在刪除它們之前,你會發現是否有任何文件。從功能的角度來看,這是毫無意義的,但如果您必須有條件地回顯文件列表,最好以這種方式做出決定。

雖然你應該知道這個輸出不能可靠地用來重建實際的文件名。

實際刪除文件,您應該再次使用find

find "$dir" -maxdepth 1 -type f -delete 

全部放在一起

dir='/var/www/public_html/docs/files/' 

if [ $(find "$dir" -type f | wc -l) -gt 0 ] ; then 
    echo Files Delete: 
    find "$dir" -maxdepth 1 -type f -printf '%f ' -delete 
fi 

在這裏,我的「打印文件」和「刪除文件」的步驟合併成一個單一調用find

相關問題