我想删除旧文件。但是这段代码非常奇怪。它认为真实条件为假
在shell屏幕上显示"没有这样的文件或目录"
#!/bin/bash
timestamp=$(date +%F_%T)
path="/blah/blah/blah/backupTest/"
message="\n*********************************************** \n \t Successfully removed \n*********************************************** \n"
if
#--This line does delete the file but is considered as false
#--even if I remove the "&& ${message}" part
find $path -name 'crm_backup_*' -type d -mtime +7 -print -exec rm -r {} \; && ${message} >> mylogfile.log
then
#--it never comes to this block
echo "Finished at $timestamp" >> mylogfile.log
else
#--It comes to this block
echo "Removal failed at $timestamp" >> mylogfile.log
exit 1
fi
答案 0 :(得分:2)
您的意思是echo "${message}" >> "${logfile}"
,代码中缺少echo
,因此您的命令是$message
的扩展,这意味着星星扩展为当前的文件名目录,第一个文件名是它试图执行的,这可能不是你想要的,并且由于消息失败,if
失败,所以它执行else
块? (仅当else
的两边都成功时才会执行&&
块 - 这意味着它们都以状态0退出。)
if find $path -name 'crm_backup_*' -type d -mtime +7 -print -exec rm -r {} \; &&
echo "${message}" >> mylogfile.log
then
echo "Finished at $timestamp" >> mylogfile.log
else
echo "Removal failed at $timestamp" >> mylogfile.log
exit 1
fi
答案 1 :(得分:0)
在路径变量中,您将从根目录分配路径。如果您没有从根目录分配路径,它将从当前目录中获取。因此,请确保路径来自根目录。
我检查了没有根目录的时间,我只得到No such file or directory