这是我的脚本,它搜索所有日志文件并将其压缩并删除旧存档。 但是,当我运行此脚本时,我收到以下错误:
./ file.sh:test:unknown operator。
代码:
#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
请告诉我哪里出错?
答案 0 :(得分: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
循环将无法操作,只会立即终止。
答案 1 :(得分:0)
抱歉,无法正确编辑帖子。但是,让它运行,:))
<强> CODE 强>
#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