2011-10-11 98 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

相关问题