条件执行但是然后进入false块(在UNIX中删除7天的旧目录/文件)

时间:2014-12-18 23:17:39

标签: bash unix

我想删除旧文件。但是这段代码非常奇怪。它认为真实条件为假

  1. IF条件下面的行执行,删除文件。
  2. 但它不会在mylogfile.log中打印$ {message}。
  3. 跳到FALSE区块。(我不知道为什么)
  4. 在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
    

2 个答案:

答案 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

的错误