0

这是我的脚本,它正在搜索所有日志文件并将其压缩并删除旧存档。但是,当我运行此脚本时,出现以下错误:

./file.sh:测试:未知操作员。

代码:

#Directory of archives

archive_dr="/u01/apps/weblogic/weblogic10/user_projects/archive"

#Directory of log files

logdir="/u01/apps/weblogic/weblogic10/user_projects/domains/BPM/servers/BPM_MS1/logs"


cd $archive_dr

#Removing older archived files

if [ find . \( -name '*.log0*.gz' -o \
         -name '*.out0*.gz' \) ]
then
    rm *.out00*.gz *.log00*.gz
fi

cd $logdir

#Search,zip and move the new archive files

if [ find . \( -name '*.log0*' -o -name '*.out0*' \) \
          -atime +30 ]
then
    for log_files in `find . \( \
            -name '*.log0*' -o -name '*.out0*' \
        \) -atime +30`

    do
        gzip $log_files
        mv $log_files.gz /u01/a*/w*/w*/us*/archive
    done

    if [$? = 0]; then
        echo "Logs Archieved Successfully"|
        mailx -s " Logs Archieved Successfully" \
            -c 'x@abc.com' y@abc.com'
    fi

请建议我哪里出错了?

4

2 回答 2

3

改变:

 if [ find . \( -name '*.log0*.gz' -o -name '*.out0*.gz' \) ]; then

至:

 if [ "$(find . \( -name '*.log0*.gz' -o -name '*.out0*.gz' \))" ]; then

您想运行该find命令并测试它是否返回任何输出。该test命令(这是[它的缩写)不执行其内容,它希望它是一个要测试的表达式,如if [ "$foo" = 3 ].

另请注意,find递归到子目录中,但您rm只能在当前目录中。如果您不想递归,请添加-maxdepth 1选项。

不需要第二个if。如果find没有找到任何文件,则for循环将没有任何操作可操作,将立即终止。

于 2013-05-31T15:52:00.730 回答
0

抱歉,无法正确编辑帖子。但是,让它运行起来,:)

代码

#Directory of archives    
archive_dr="/u01/apps/weblogic/weblogic10/user_projects/archive"    

  #Directory of log files

 logdir="/u01/apps/weblogic/weblogic10/user_projects/domains"
   cd $archive_dr 
 #Removing older archived files
   find . \( -name '*.log00*.gz' -o -name '*.out00*.gz' \) -exec  rm {} \;

 cd $logdir

    #Search,zip and move the new archive files

for log_files in `find . \( -name '*.log0*' -o -name '*.out0*' \) -ctime +5`
    do

            gzip $log_files

            mv $log_files.gz /u01/a*/w*/w*/us*/archive

    done        
     if [ $? = 0 ]; then  

   echo "text"|mailx -s "test" -c abc@def.com' mno@pqr.com'  
 fi
于 2013-06-03T08:03:13.860 回答